我有一个名为 _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
加载了吗?执行此操作的最佳方法是什么?
最佳答案
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
旁注:在大多数情况下,您应该可以将 Assets 主机设置为 mu_is_too_short 评论。如果您需要除此之外的任何东西,您可以使用 Railtie 的自定义初始化器。
关于ruby-on-rails - rails : Have initializer load before application. rb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249006/