停止Rails在开发模式下卸载模块

时间:2010-03-10 18:12:56

标签: ruby-on-rails dependencies reloadable development-mode

我的Rails应用程序中有一个模块,位于/ lib

module MyModule
  mattr_accessor :the_variable

  class << self
    def setup
      yield this
    end
  end
end

从我的environments/#{RAILS_ENV}.rb文件中,我可以为the_variable设置特定于环境的值:

MyModule.setup do |my_module_config|
  my_module_config.the_variable = 42
end

这很可爱,似乎工作(几乎)很好。

问题是在开发模式下,Rails via ActiveSupport::Dependencies卸载了一大堆模块,并及时为新请求重新加载它们。这通常是一个很好的行为,因为这意味着您在进行代码更改时不需要重新启动localhost服务器。

然而,这也清除了我初始化的the_variable变量,当下一个请求进入时,初始化(显然)不会再次运行。最终结果是后续请求最终将MyModule.the_variable设置为nil而不是我正在寻找的42

我正在尝试解决如何在请求结束时停止Rails卸载我的模块,或者找到另一种方法来为我的模块干净地提供特定于环境的配置。

有什么想法吗? : - /

1 个答案:

答案 0 :(得分:10)

在引用MyModule之前的环境文件中,使用require加载文件。

require 'my_module'

这绕过了动态依赖加载机制。