我有一个具有页面缓存的控制器操作,我创建了一个清理程序,它使用控制器和指定的操作调用expire_page ...
控制器操作呈现js.erb模板,所以我试图确保expire_page删除public / javascripts中的.js文件,它没有这样做。
class JavascriptsController < ApplicationController
caches_page :lol
def lol
@lol = Lol.all
end
end
class LolSweeper < ActionController::Caching::Sweeper
observe Lol
def after_create(lol)
puts "lol!!!!!!!"
expire_page(:controller => "javascripts", :action => "lol", :format => 'js')
end
end
...所以,我访问了javascripts / lol.js并且我得到了我的模板...我验证了public / javascripts / lol.js存在...然后我创建了一个新的Lol记录,我看到了“lol !!!!!!!!!”意味着触发了after_create观察者方法,但是expire_page什么也没做......
答案 0 :(得分:2)
根据RailsGuides:'页面缓存忽略所有参数。'我认为我在兑现.xml
回复时遇到了类似的问题:我会为/lol.xml
编写缓存,但却试图使/lol
(write
和{{的缓存失效1}}操作可以在服务器日志中看到)。我的工作方式:我使缓存“格式不可知”如下:
expire
并在清道夫中过期:
cashes_page :lol, :cache_path => Proc.new { |controller| controller.params.delete_if {|k,v| k == "format"} }
它解决了我的问题。另外,作为备注,您的expire_page(:controller => "javascripts", :action => "lol")
行动不应该被称为lol
吗?祝你好运。
答案 1 :(得分:0)
我尝试了从西蒙的答案中找到解决方案,但它对我不起作用。有效的解决方案是:
expire_page('javascripts/lol.js')