rails自动加载和初始化程序

时间:2015-01-17 16:02:15

标签: ruby-on-rails

我有一个带有基本配置模式和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(这是为什么?)。

1 个答案:

答案 0 :(得分:2)

您可以将初始化代码放入ActionDispatch::Callbacks.to_prepare {}块。只要rails重新加载类,它就会对它进行评估。