rails expire_page不会删除缓存的文件

pat*_*ick 6 ruby ruby-on-rails

我有一个具有页面缓存的控制器操作,我制作了一个清扫器,它使用控制器调用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
Run Code Online (Sandbox Code Playgroud)

...所以,我访问javascripts/lol.js,我得到了我的模板...我验证了public/javascripts/lol.js存在......然后我创建了一个新的Lol记录,我看到了"哈哈!" !!!!!!" 意味着触发了after_create观察者方法,但是expire_page什么也没做......

Sim*_*eev 2

根据 RailsGuides 的说法:“页面缓存会忽略所有参数。” 我认为我在处理兑现.xml响应时遇到了类似的问题:我会编写 的缓存/lol.xml,但试图使 的缓存过期/lolwrite并且expire可以在服务器日志中看到操作)。我使它工作的方式:我使缓存“与格式无关”,如下所示:

cashes_page :lol, :cache_path => Proc.new { |controller| controller.params.delete_if {|k,v| k == "format"} }
Run Code Online (Sandbox Code Playgroud)

并在清扫器中过期,如下所示:

expire_page(:controller => "javascripts", :action => "lol")
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题。另外,请注意,您的lol操作不应该被调用吗lols?祝你好运。