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

Mar*_*ske 16 activerecord caching ruby-on-rails-3

在开发中,以下(简化)语句始终记录缓存未命中,在生产中它按预期工作:

@categories = Rails.cache.fetch("categories", :expires_in => 5.minutes) do
  Rails.logger.info "+++ Cache missed +++"
  Category.all
end
Run Code Online (Sandbox Code Playgroud)

如果我在config/development.rb中将config.cache_classes从false更改为true,那么它在开发模式下也可以正常工作,但这会使开发变得相当痛苦.是否有任何配置设置,config.cache_classes = false除了Rails.cache.fetch是否可以从缓存中获取?

ms-*_*ati 32

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

# Temporarily enable caching in development (COMMENT OUT WHEN DONE!)
config.action_controller.perform_caching = true
Run Code Online (Sandbox Code Playgroud)

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

# copied from production.rb into development.rb for caching in development
config.cache_store = :dalli_store, '127.0.0.1' 
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 只是一个额外的提示,添加一个除非ENV ["DEV_CACHE"]将测试配置放入其中,使用其中具有正常非缓存配置的else.然后,只要您想在终端中启用缓存,就可以编写export DEV_CACHE ="ANYTHING".最好的部分是,当你不想要它时,你不太可能意外地启用了缓存. (9认同)
  • 这个技巧与解决方案一起非常有用。 (2认同)