我必须在/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
识别它?
答案 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,这主要启发了这个答案。