加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 停止Rails在开发模式下卸载模块

发布时间:2020-12-17 03:51:18 所属栏目:百科 来源:网络整理
导读:我的Rails应用程序中有一个模块,它位于/ lib中 module MyModule mattr_accessor :the_variable class self def setup yield this end endend 从我的环境/#{RAILS_ENV} .rb文件中,我可以为the_variable设置特定于环境的值: MyModule.setup do |my_module_con
我的Rails应用程序中有一个模块,它位于/ lib中

module MyModule
  mattr_accessor :the_variable

  class << self
    def setup
      yield this
    end
  end
end

从我的环境/#{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卸载我的模块,或者找到另一种方法来干净地为我的模块提供特定于环境的配置.

有任何想法吗? : – /

解决方法

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

require 'my_module'

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读