I have to use a constant inside my /app/config/environments/production.rb
. I'd like to put it somewhere as configuration constant. So I tried to put it inside an initializer
file, but /app/config/environments/production.rb
seems to be loaded before. Then I tried to put my constant inside Rails::Initializer.run do |config|...
inside the /app/config/environment.rb
, but /app/config/environments/production.rb
still seems to be loaded before. Where can I put propermy this constant as a config constant so that /app/config/environments/production.rb
recognizes it ?
1 回答
让我们弄清楚您通过什么路径到达您的应用程序加载初始化文件。你必须记住这一点:
当您运行rails s
(从您的app/script/rails
文件)运行rails
服务器时,
需要您的应用程序
boot.rb
文件(主要处理 gems 加载),然后将您的控制台args
(此处为server
aliass
)要求传递给该rails
railties/lib/rails/command.rb
文件(位于rails
源代码中)。在那里,您的应用程序
config/application.rb
是必需的。然后,Server
类被实例化,你被扔到railties/lib/rails/command/server.rb
文件中。事实上,这个Server
类继承自Rack::Server
,所以一个rails
app 就是rack
app !因此,您会config.ru
在您的应用程序中找到一个文件rails
,这会加载该config/environment.rb
文件。
该config/environment.rb
文件做了两件事
需要您的应用程序
config/applcation.rb
,加载正确的rails framework
。(有关信息,您会在您的应用程序中找到继承自application.rb
的Application
类,该类继承自Rails::Application
,该类Rails::Engine
继承自一个Rails::Railtie
类)调用
initialize!
bang 方法,加载config/environment/*.rb
文件,然后处理所有初始化程序进程(更准确地说,初始化程序方法定义在railties/lib/rails/engine.rb
)文件中。因此,现在,考虑到这一点,您应该能够正确定义常量。
为了更好地理解初始化过程,我向您推荐这个伟大的railscast,它主要启发了这个答案。