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

ruby-on-rails – 每次请求都会重新加载模块,因此初始化数据会丢

发布时间:2020-12-16 19:05:02 所属栏目:百科 来源:网络整理
导读:我将值存储在模块内的类变量中,例如: module TranslationEnhancer def self.install! klass @dictionaries ||= [] klass end ...end 我从config / initializers中的初始化程序中调用它: require Rails.root + "lib" + "translation_enhancer.rb"Translatio
我将值存储在模块内的类变量中,例如:
module TranslationEnhancer
  def self.install! klass
    @dictionaries ||= [] << klass
  end
  ...
end

我从config / initializers中的初始化程序中调用它:

require Rails.root + "lib" + "translation_enhancer.rb"
TranslationEnhancer::install! TranslationDictionary

现在,如果我在开发环境中启动服务器,在第一次请求期间一切正常.然而,在那个请求之后,@dictionaries突然变为零.我已经在TranslationEnhancer中评论了所有其他代码,因此我绝对相信每次执行请求时都必须重新加载整个模块.

我试图将模块移到lib目录之外(将其移动到lib_unloadable),然后我尝试:

ActiveSupport::Dependencies.explicitly_unloadable_constants << "TranslationEnhancer"

但又失败了.我不知道如何解决这个问题,请帮忙.

得到Ruby 1.9.2 @ Rails 3.1.rc4.

编辑:我知道我可以将字典设置为常量.但是我想使用TranslationEnhancer作为库 – 所以我可以在不同的项目中不加改变地使用它并安装不同的目录,例如:

TranslationEnhancer.install! EnglishDirectory,FrenchDirectory

这些值在运行时期间会发生变化,它们只会将项目更改为项目.

解决方法

解决了!

我意识到整个application.rb和environment.rb文件与所有其他文件一起重新加载.唯一没有重新加载的是初始化器(config / initializers / *).解决方案是将初始化移动到application.rb.

(编辑:李大同)

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

    推荐文章
      热点阅读