将配置常量放在rails中的位置

时间:2013-08-28 21:33:36

标签: ruby-on-rails ruby configuration

我必须在/app/config/environments/production.rb内使用常量。我想把它作为配置常量。所以我试着将它放在initializer文件中,但/app/config/environments/production.rb似乎之前已加载。然后我尝试将Rails::Initializer.run do |config|...内的常量放在/app/config/environment.rb内,但/app/config/environments/production.rb似乎仍然在加载之前。我在哪里可以将此常量作为配置常量,以便/app/config/environments/production.rb识别它?

1 个答案:

答案 0 :(得分:3)

让我们明确指出您的应用程序加载启动文件的路径是什么。你必须牢记这一点:

运行运行rails s服务器的app/script/rails(来自rails文件),

  • 您的应用boot.rb文件(主要处理宝石加载)是必需的,然后您的控制台args(此处为server别名s)要求为传递到rails railties/lib/rails/command.rb文件(位于rails源代码中)。

  • 在那里,您的应用config/application.rb是必需的。然后,实例化Server类,并将您放入railties/lib/rails/command/server.rb文件中。事实上,Server类来自Rack::Server,因此rails应用是rack应用!因此,您会在config.ru应用中找到rails文件,这会加载config/environment.rb文件。

config/environment.rb文件执行两项操作

  • 要求您的应用config/applcation.rb加载正确的rails framework。(有关信息,您会在应用application.rb中找到继承的Application类来自Rails::Application的{​​{1}},它继承自Rails::Engine类的Rails::Railtie

  • 调用initialize! bang方法,加载config/environment/*.rb文件,然后处理所有初始化过程(更确切地说,初始化方法在railties/lib/rails/engine.rb中定义)文件。所以,现在,考虑到这一点,你应该能够正确定义你的常量。

为了更好地理解初始化过程,我建议你这个伟大的railscast,这主要启发了这个答案。