web-dev-qa-db-fra.com

Comment définir l'hôte par défaut pour les aides 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, de sorte que object_url helpers (ActionView::Helpers::UrlHelper) produise des liens commençant par http://www.subdomain.example.com

J'ai essayé de chercher dans la documentation 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 dans quelle patte à regarder. Existe-t-il un endroit décrivant la structure complète de Rails :: Initializer.config?

59
gorn

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
52
Wilhelm

Définissez l'hôte par défaut dans la configuration de votre environnement:

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

Ensuite, vous pouvez créer une URL n'importe où dans votre application:

Rails.application.routes.url_helpers.widgets_url()

Ou incluez les aides 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 transmettre en tant qu'option:

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

Il est également utile de spécifier des éléments tels que le protocole:

widgets_url protocol: 'https'
43
Andrew

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

# config/production.rb
config.action_controller.default_url_options = { Host: 'myproduction.com' }
28
goma

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

2
NStojanovic

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

L'hôte de ressource suggéré dans la réponse précédente n'affectera que les assistants image_tag, stylesheet_link_tag et javascript_link_tag.

0
Robert Speicher