我有一个名为Event的模型,在事件模型中,我有以下代码:
def self.all_events
Rails.cache.fetch("events", expires_in: 2.days) do
Event.all.to_a
end
end
我在一个控制器中调用了all_events
方法。如果上面的方法有效,那么服务器日志应该只在第一次调用控制器代码时显示查询,并且在接下来的两天中,每次调用控制器代码时,事件都应该作为一个数组存在于内存中-对吗?出于某种原因,服务器日志每次都显示数据库查询。我如何使缓存工作呢?
2条答案
按热度按时间q1qsirdb1#
您必须在两个环境中正确配置缓存设置。
我更喜欢在Heroku上使用Redis作为生产环境。您可以在开发环境中使用memory_store或file_store选项。https://elements.heroku.com/addons/heroku-redis
让菲尔
配置/环境/生产.rb
配置/环境/开发.rb
您可以在那里找到更多关于Ruby on Rails缓存的细节;http://guides.rubyonrails.org/caching_with_rails.html
ktca8awb2#
在开发和生产中检查缓存配置。在开发中,必须显式打开缓存(使用
rails dev:cache
或touch tmp/caching-dev.txt
并重新启动开发服务器)。注意 * development.rb * 中的缓存配置,
默认情况下,开发中的缓存是关闭的,必须显式打开开发中的缓存,如Caching with Rails: An Overview文档所示。