Rails:在application.rb之前加载初始化程序

时间:2014-01-21 04:08:47

标签: ruby-on-rails ruby ruby-on-rails-3 configuration initialization

我有一个名为_settings.rb的初始化程序,它看起来像这样

class Settings < Settingslogic
    source "#{Rails.root}/config/application.yml"

    namespace Rails.env
end

我的application.yml定义了一个我称之为environhost的自定义设置的值。 我用它来称呼它:

   Settings.environhost

这很好用,当我尝试调用/app/config/application.rb中的值时除外

config.action_controller.asset_host = Settings.environhost

为此,我获得了一个未初始化的常量。

无论如何我可以在我的application.rb中放一个指针来加载_settings.rb

 config.action_controller.asset_host = Settings.environhost

已加载?最好的方法是什么?

http://guides.rubyonrails.org/initialization.html

1 个答案:

答案 0 :(得分:0)

Rails自己的配置将始终在任何自定义事物之前加载,这是肯定的。否则你能想象出一团糟:)

解决方案不是在Rails配置之前尝试加载。相反,挂钩到初始化程序以添加自己的逻辑来覆盖Rails默认值。

Railtie是你可以毫无汗水地做到这一点的地方。在这里,您可以访问包括Rails在内的所有初始化程序中共享的config方法。

module MySettings
  def self.environhost
    "foobar"
  end

  class MySettingsRailtie < Rails::Railtie
    config.action_controller.asset_host = MySettings.environhost
  end
end

附注:在大多数情况下,您可以将资产主机设置为mu_is_too_short进行评论。如果您需要其他任何东西,可以使用Railtie的自定义初始化程序。