Comment définir l’hôte par défaut pour les aides d’url dans les rails?

Je voudrais faire quelque chose comme ça

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

dans certains de mes fichiers de configuration, afin que les helpers ActionView::Helpers::UrlHelper ( ActionView::Helpers::UrlHelper ) produisent des liens commençant par http://www.subdomain.example.com

J’ai essayé de rechercher les documents, mais je n’ai rien trouvé à part les documents ActionMailer et http://api.rubyonrails.org/classes/Rails/Configuration.html qui ne me sont pas utiles, car je ne sais pas à qui Regardez. Y a-t-il une place qui décrit toute la structure de Rails :: Initializer.config?

asset_host ne fonctionne pas pour les URL

Vous devez remplacer default_url_options dans votre ApplicationController (au moins dans 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 

Définissez l’hôte par défaut dans votre environnement config:

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

Vous pouvez ensuite créer une URL n’importe où dans votre application:

 Rails.application.routes.url_helpers.widgets_url() 

Ou incluez les aides d’URL dans votre classe:

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

Si vous ne définissez pas l’hôte par défaut, vous devrez le passer en option:

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

Il est également utile de spécifier des choses comme le protocole:

 widgets_url protocol: 'https' 

Une autre façon est de le définir comme ça

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

Vous pouvez facilement définir :host ou / et :only_path paramètre pour chaque url_helper. yours_url(params, :host => "http://example.com", :only_path => Rails.env.test?) , vous ne définissez pas les default_url_options globaux dans vos environnements, sauf si vous le souhaitez.

Pour autant que je sache, les assistants *_url utilisent le nom d’hôte configuré du serveur. Ainsi, par exemple, si mon installation Apache accepte des demandes pour cette application Rails sur http://www.myapp.com/ Rails utilisera cette adresse. C’est pourquoi les méthodes *_url dans un environnement de développement pointent vers http://localhost:3000 par défaut.

L’hôte hôte proposé dans la réponse précédente n’affectera que les image_tag , stylesheet_link_tag et javascript_link_tag .

Le moyen le plus simple d’obtenir votre URL de domaine dynamic en utilisant une variable globale dans les rails.

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

Après avoir simplement appelé cette méthode dans votre fichier d'en-tête < % base_url %> , vous pouvez maintenant accéder à l'URL de votre domaine n'importe où dans votre application.

La solution de NSD est la façon dont je le fais, mais je devais append un bloc pour le faire fonctionner avec https:

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

Il y a ça, mais je ne suis pas très sûr que ce soient les aides dont vous parlez:

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

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