Question

Je dois forcer l'hôte dans l'un des environnements dans mon application rails.

Je l'ai peut obtenir la dérogation au travail en incluant

  def default_url_options(opts={})
   opts.merge({:host => 'stg.my-host.com'})
  end

dans app / controllers / application.rb

Mais est-il un moyen de mettre ceci sur initialize, de préférence dans une config / environnements / ... fichier? Je voudrais essayer de garder la logique env conditionnelle hors du contrôleur.

Mais quand j'essaie

   config.action_controller.default_url_options = { ... }

ou même

ActionController::Base.default_url_options = { ... }

je reçois "méthode non définie," même si une enveloppe dans un config.after_initialize {...}

toutes les pensées?

Était-ce utile?

La solution

La réponse est ... il est impossible parce que default_url_options est mis en œuvre en fonction, pas attr.

De action_pack / action_controller / base.rb: 1053:

  # Overwrite to implement a number of default options that all url_for-based methods will use. The default options should come in
  # the form of a hash, just like the one you would use for url_for directly. Example:
  #
  #   def default_url_options(options)
  #     { :project => @project.active? ? @project.url_name : "unknown" }
  #   end
  #
  # As you can infer from the example, this is mostly useful for situations where you want to centralize dynamic decisions about the
  # urls as they stem from the business domain. Please note that any individual url_for call can always override the defaults set
  # by this method.
  def default_url_options(options = nil)
  end

Autres conseils

Vous pouvez forcer la configuration de cette façon:

config.action_mailer.default_url_options = { :host => "foo.com" }

Le problème dans votre code est que vous avez utilisé config.action_controller au lieu de config.action_mailer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top