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

我有一个初始化程序,可从yaml文件加载配置设置。 我需要在其他初始化程序中使用这些设置。 需要设置的初始化程序不会看到这些设置。 我认为正在发生的事情是设置加载太晚了。 如何保证我的配置初始化程序首先被加载? 像让初始化程序依赖另一个一样,这是没有道理的吗?

谢谢!

Tim Santeford asked 2019-10-09T07:34:19Z
4个解决方案
78 votes

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

编辑

引用官方的《 Rails指南》进行配置(感谢zetetic的技巧):

如果您有任何订购依赖性   您的初始值设定项,您可以控制   通过命名来加载订单。 例如,   01_critical.rb将在之前加载   02_normal.rb。

Júlio Santos answered 2019-10-09T07:34:45Z
24 votes

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

# 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!
Tyler Long answered 2019-10-09T07:35:09Z
23 votes

即使指南建议在初始化程序文件名前加数字,这看起来也很难看。 另一种方法是利用提供的初始化挂钩。 请参阅[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
noomerikal answered 2019-10-09T07:35:36Z
6 votes

使用require_relative确保首先加载一个文件。

# aaa.rb
require_relative 'bbb'
# ... code using values from bbb.rb ...
Peter J. Hart answered 2019-10-09T07:36:00Z
translate from https://stackoverflow.com:/questions/4779773/how-do-i-change-the-load-order-of-initializers-in-rails-3