rails expire_page不会删除缓存的文件

时间:2011-10-20 01:32:48

标签: ruby-on-rails ruby

我有一个具有页面缓存的控制器操作,我创建了一个清理程序,它使用控制器和指定的操作调用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什么也没做......

2 个答案:

答案 0 :(得分:2)

根据RailsGuides:'页面缓存忽略所有参数。'我认为我在兑现.xml回复时遇到了类似的问题:我会为/lol.xml编写缓存,但却试图使/lolwrite和{{的缓存失效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')