我有一个名为_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
已加载?最好的方法是什么?
答案 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的自定义初始化程序。