¿Cómo configuro el host predeterminado para los ayudantes de url en los Rails?

Me gustaría hacer algo como esto

config.default_host = 'www.subdomain.example.com' 

en algunos de mis archivos de configuración, para que object_url helpers ( ActionView::Helpers::UrlHelper ) produzca enlaces que comiencen por http://www.subdomain.example.com

Intenté buscar en los documentos, pero no encontré nada, excepto los documentos de ActionMailer y http://api.rubyonrails.org/classes/Rails/Configuration.html, que no es útil para mí, porque no sé en qué momento Mira. ¿Hay algún lugar que describa la estructura completa de Rails :: Initializer.config?

asset_host no funciona para las URL

Debes anular las default_url_options en tu ApplicationController (al menos en Rails 3)

http://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options

 class ApplicationController < ActionController::Base def default_url_options if Rails.env.production? {:host => "myproduction.com"} else {} end end end 

Defina el host predeterminado en la configuración de su entorno:

 # config/environments/staging.rb MyApp::Application.configure do # ... Rails.application.routes.default_url_options[:host] = 'preview.mydomain.com' # ... end 

Luego puedes crear una URL en cualquier lugar de tu aplicación:

 Rails.application.routes.url_helpers.widgets_url() 

O incluye los ayudantes de URL en tu clase:

 class MyLib include Rails.application.routes.url_helpers def make_a_url widgets_url end end 

Si no define el host predeterminado, deberá pasarlo como una opción:

 widgets_url host: (Rails.env.staging? ? 'preview.mydomain.com' : 'www.mydomain.com') 

También es útil especificar cosas como el protocolo:

 widgets_url protocol: 'https' 

Otra forma es configurarlo así

 # config/production.rb config.action_controller.default_url_options = { host: 'myproduction.com' } 

Puede establecer fácilmente :host o / y :only_path parámetro :only_path para cada url_helper. yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?) esta manera no está configurando global_url_options en sus entornos, a menos que así lo desee.

Hasta donde yo sé, los ayudantes de *_url usan el nombre de host configurado del servidor. Entonces, por ejemplo, si mi instalación de Apache acepta solicitudes para esta aplicación de Rails en http://www.myapp.com/ entonces Rails usará esa dirección. Es por eso que los métodos *_url en un entorno de desarrollo apuntan a http://localhost:3000 de manera predeterminada.

El host de image_tag sugerido en la respuesta anterior solo afectará a los image_tag , stylesheet_link_tag y javascript_link_tag .

La forma más simple de obtener su url de dominio dynamic usando una variable global en Rails.

 class ApplicationController < ActionController::Base def base_url $base_url = request.base_url end end 

Después de simplemente llamar a este método en su archivo de encabezado <% base_url %> , ahora puede acceder a la URL de su dominio en cualquier lugar de su aplicación.

La solución de NSD es cómo lo hago, pero tuve que agregar un bloque para que funcione con https:

 config.action_controller.asset_host = Proc.new { |source, request| (request ? request.protocol : 'http://') + "www.subdomain.example.com" } 

Hay esto, pero no estoy muy seguro de si son los ayudantes a los que te refieres:

 ActionController::Base.asset_host = "assets.example.com" 

http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html