标签: reloadable

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

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

module MyModule
  mattr_accessor :the_variable

  class << self
    def setup
      yield this
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

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

MyModule.setup do |my_module_config|
  my_module_config.the_variable = 42
end
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

有任何想法吗?: - /

dependencies ruby-on-rails reloadable development-mode

4
推荐指数
1
解决办法
1456
查看次数