如何更改 Rails 中初始化程序的加载顺序?

我有一个初始化器,可以从 yaml 文件加载配置设置。我需要在其他初始化程序中使用这些设置。需要这些设置的初始化程序看不到这些设置。我觉得是设置加载得太晚了。如何保证首先加载配置初始化器?取消轨道是否像初始化器依赖于另一个初始化器一样?

谢谢!

27991 次浏览

将初始化器重命名为 01_name.rb,这将强制它以前按字母顺序加载。

剪辑

引用官方的 配置指南(感谢 探索者的提示) :

中具有任何排序依赖项 你的初始化器,你可以控制 通过命名加载顺序。例如, 之前将加载01 _ critical.rb 02 _ Normal. rb.

将配置代码放在 config/Environment. rb 文件中,紧接在第一个 request 语句之后,例如:

# Load the rails application
require File.expand_path('../application', __FILE__)


# Load global configurations
CONFIG = Hashie::Mash.new YAML.load_file(Rails.root.join("config", "application.yml"))[Rails.env]


# Initialize the rails application
RailsSetup::Application.initialize!

尽管指南建议在初始化程序文件名前面加上数字,但这看起来确实很难看。另一种方法是利用提供的初始化挂钩。参见 http://guides.rubyonrails.org/configuring.html#initialization-events

例如。

# application.rb


module YourApp
class Application < Rails::Application
config.before_initialize do
# initialization code goes here
end
end
end

使用 request _ relant 确保首先加载了一个文件。

# aaa.rb
require_relative 'bbb'
# ... code using values from bbb.rb ...