5

我的 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 通过ActiveSupport::Dependencies卸载大量模块,并及时重新加载它们以应对新请求。这通常是一个很好的行为,因为这意味着您在进行代码更改时不需要重新启动 localhost 服务器。

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

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

有任何想法吗?:-/

4

1 回答 1

10

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

require 'my_module'

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

于 2010-03-11T04:35:54.657 回答