我在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卸载模块的负载,并为新请求及时重新加载它们。这通常是一个很好的行为,因为这意味着您在进行代码更改时无需重新启动本地主机服务器。

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

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

有任何想法吗? :-/

最佳答案

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

require 'my_module'

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

关于ruby-on-rails - 在开发模式下阻止Rails卸载模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2419391/

10-12 15:24
查看更多