小编典典

在初始化程序中设置cache_store

redis

我正在尝试使用redis-store作为我的Rails 3
cache_store。我也有一个initializer /
app_config.rb,它加载一个yaml文件进行配置设置。在我的初始值设定项/redis.rb中,我有:

MyApp::Application.config.cache_store = :redis_store, APP_CONFIG['redis']

但是,这似乎不起作用。如果我做:

Rails.cache

在我的Rails控制台中,我可以清楚地看到它正在使用

ActiveSupport.Cache.FileStore

作为缓存存储而不是redis存储。但是,如果我像这样在我的application.rb文件中添加配置:

config.cache_store = :redis_store

它工作正常,只是在app.rb之后加载了app config初始化程序,所以我无权访问APP_CONFIG。

有人经历过吗?我似乎无法在初始化程序中设置缓存存储。


阅读 463

收藏
2020-06-20

共1个答案

小编典典

经过一些
研究,一个可能的解释是initialize_cache初始化程序是在rails /
initializers之前运行的。因此,如果未在执行链的早期定义它,则不会设置缓存存储区。您必须在链的早期配置它,例如在application.rb或environment
/ production.rb中

我的解决方案是在对应用进行如下配置之前移动APP_CONFIG加载:

APP_CONFIG = YAML.load_file(File.expand_path('../config.yml', __FILE__))[Rails.env]

然后在同一个文件中:

config.cache_store = :redis_store, APP_CONFIG['redis']

另一个选择是将cache_store放在before_configuration块中,如下所示:

config.before_configuration do
  APP_CONFIG = YAML.load_file(File.expand_path('../config.yml', __FILE__))[Rails.env]
  config.cache_store = :redis_store, APP_CONFIG['redis']
end
2020-06-20