例如,我目前将全局常量放在config/initializers/constants.rb
文件中,其内容如下:
KB = 1000
我希望我的应用程序在添加此行代码后,无需重新启动服务器即可立即识别MB
:
MB = KB * KB
这个可能吗?
例如,我目前将全局常量放在config/initializers/constants.rb
文件中,其内容如下:
KB = 1000
我希望我的应用程序在添加此行代码后,无需重新启动服务器即可立即识别MB
:
MB = KB * KB
初始化程序是设计为仅在应用程序初始化时执行一次的。如果您希望某些内容可以重新加载,请将其放在lib
文件夹内的单独模块中。这里有一个完整的主题,关于自动加载和重新加载常量:
module Colors
RED = '0xff0000'
end
请注意,您还需要调整您的application.rb文件。 config.autoload_paths << "#{Rails.root}/lib"
module Constants
KB = 1000
end
然后在您的类中,您可以使用您的常量:
class Something
include Constants
MB = KB * KB
end
如果您在页面重新加载时更改KB的值,则MB将随之更改,而无需重启。
config/application.rb:
...
config.autoload_paths << "#{Rails.root}/lib"
...
config/initializers/init_constants.rb:
require 'constants'
lib/constants.rb:
KB = 1000
MB = KB * KB
app/controllers/applicaton_controller.rb(在 ApplicationController 类之后):
class ApplicationController ...
...
end
require_dependency 'constants' if Rails.env.development?
常量似乎在每个请求中自动重新加载。
不太确定为什么会这样工作。
KB
的其他类将未定义。我认为ApplicationController可能不总是第一个自动加载的类。但是,是的,在应用程序早期初始化时,代码留下了常量重复定义的警告。 - Johnny Wongrequire 'constants'
替换为puts "#{KB}"
。因此,我认为保留该行代码进行早期初始化是可以的。 :) - Johnny Wong