Como faço para definir o host padrão para os auxiliares de URL nos rails?

Eu gostaria de fazer algo assim

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

em alguns dos meus arquivos de configuração, para que os helpers object_url ( ActionView::Helpers::UrlHelper ) produzam links começando com http://www.subdomain.example.com

Eu tentei pesquisar os documentos, mas eu não encontrei nada, exceto ActionMailer docs e http://api.rubyonrails.org/classs/Rails/Configuration.html que não é útil para mim, porque eu não sei em que tapinha para Veja. Existe um lugar que descreve toda a estrutura do Rails :: Initializer.config?

asset_host não funciona para URLs

Você precisa sobrescrever default_url_options no seu ApplicationController (pelo menos no 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 o host padrão em sua configuração de ambiente:

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

Em seguida, você pode criar um URL em qualquer lugar do seu aplicativo:

 Rails.application.routes.url_helpers.widgets_url() 

Ou inclua os auxiliares de URL em sua turma:

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

Se você não definir o host padrão, será necessário passá-lo como uma opção:

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

Também é útil especificar coisas como o protocolo:

 widgets_url protocol: 'https' 

Outra maneira é configurá-lo assim

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

Você pode definir facilmente :host ou / e :only_path parâmetro :only_path para cada url_helper. yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?) Desta forma você não está configurando default_url_options globais em seus ambientes, a menos que você queira.

Tanto quanto sei, os ajudantes *_url usam o nome do host configurado do servidor. Por exemplo, se a minha instalação do Apache estiver aceitando solicitações para este aplicativo Rails em http://www.myapp.com/ , o Rails usará esse endereço. É por isso que os methods *_url em um ambiente de desenvolvimento apontam para http://localhost:3000 por padrão.

O host de resources sugerido na resposta anterior afetará apenas os image_tag , stylesheet_link_tag e javascript_link_tag .

Maneira mais simples de obter seu URL de domínio dynamic usando uma variável Global em rails.

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

Depois basta chamar este método em seu arquivo de header <% base_url %> , agora você pode acessar o URL do seu domínio em qualquer lugar em seu aplicativo.

A solução da NSD é como eu faço, mas eu tive que adicionar um bloco para fazê-lo funcionar com https:

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

Tem isso, mas não tenho muita certeza se são os ajudantes que você está se referindo:

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

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