我有一个带有基本配置模式和API连接方法的简单模块。我在初始化程序中配置此模块。
服务/ tasks_manager.rb:
module TasksManager
class << self
attr_reader :client
end
def self.configuration
@configuration ||= Configuration.new
end
def self.configure
yield configuration
end
def self.connect
@client ||= SecretAPI::Client.new do |config|
config.url = configuration.url
config.token = configuration.token
config.username = configuration.username
config.password = configuration.password
end
self
end
#.
#.
# other stuff
#.
#.
class Configuration
attr_accessor :url
attr_accessor :username
attr_accessor :token
attr_accessor :password
end
end
配置/初始化/ tasks_manger.rb
TasksManager.configure do |config|
config.url = "a..."
config.username = "b..."
config.password = "c..."
config.token = "d..."
end
当我启动rails app时,一切正常,我可以使用不同对象的TasksManager,它使用的是在初始化程序中设置的配置。但...
当我对services / tasks_manager.rb文件做一个小改动时,比如评论一些内容或添加新方法。我需要重启rails应用程序。 TasksManager.configuration在此阶段为空。看起来对文件进行更改会强制创建新模块,并且不会加载初始化程序。
这可能是一种正常的行为,但我花了一段时间才弄清楚,我想也许有人能够向我解释。
我正在使用带弹簧的导轨4.2(这是为什么?)。
答案 0 :(得分:2)
您可以将初始化代码放入ActionDispatch::Callbacks.to_prepare {}
块。只要rails重新加载类,它就会对它进行评估。