Rails3 - 在开发模式下使用Rails.cache.fetch进行缓存

18
在开发中,以下(简化的)语句始终记录缓存未命中,但在生产环境中它按预期工作:
@categories = Rails.cache.fetch("categories", :expires_in => 5.minutes) do
  Rails.logger.info "+++ Cache missed +++"
  Category.all
end
如果我将config/development.rb中的config.cache_classes从false更改为true,则它在开发模式下也可以工作,但是这会使开发非常痛苦。是否有任何配置设置,类似于“ config.cache_classes = false”,除了Rails.cache.fetch尝试从缓存中获取数据之外?
1个回答

34

尝试将以下内容放置在/config/environments/development.rb中:

# Temporarily enable caching in development (COMMENT OUT WHEN DONE!)
config.action_controller.perform_caching = true

此外,如果您的缓存存储配置位于/config/environments/production.rb中,则还需要将相应的行复制到development.rb中。例如,如果您的缓存存储是Dalli memcache宝石:

# copied from production.rb into development.rb for caching in development
config.cache_store = :dalli_store, '127.0.0.1' 

希望这能帮到你。


10
额外小技巧:在代码中加入 unless ENV["DEV_CACHE"] 条件语句,将测试配置放进这个条件语句里面,在 else 语句里放置没有缓存的普通配置。这样,当你想要在终端启用缓存时,只需输入 export DEV_CACHE="ANYTHING" 即可。最好的部分是,你不太可能在不想要缓存的情况下意外启用它。 - tehprofessor
2
这个提示和解决方案一起非常有用。 - anbiniyar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接