调用控制器的操作时,将启用ActiveRecord查询缓存。我也知道你可以这样做,为给定的代码块临时启用给定Model的缓存:
User.cache do
....
end
但有没有办法为其他上下文启用查询缓存(例如,当使用./script/runner在rails环境下运行脚本时)?
答案 0 :(得分:3)
ActiveRecord查询缓存仅在特定操作(即请求)的持续时间内存在。如果您希望缓存对象存活更长时间或在进程之间使用,则需要查看memcached之类的内容。
答案 1 :(得分:0)
This plugin将使用memcached持久保存查询缓存。
答案 2 :(得分:0)
一个简单的解决方案是直接在命令行上将给定script/runner
的代码包装在一个块中:
script/runner "User.cache { ... }"
请注意,缓存不仅适用于User
模型,还适用于代码块中执行的所有查询。
答案 3 :(得分:0)
要在运行脚本时获得查询缓存,您需要使用以下代码包装任何代码:
ActiveRecord::Base.connection.cache do
your_code_here
end
看起来Rails会自动为正常调用Action设置查询缓存,但是您必须在其他情况下手动进行。