Rails - 片段缓存未到期

时间:2009-05-22 05:45:16

标签: ruby-on-rails ruby caching fragment

这个让我难过。

我有一个缓存片段的视图:

 - cache :key=>"news" do    
   %h2 News
   - etc

我有一个清扫车使用:

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment(:key => "news") 
end

清理器被调用,因为我可以在控制台输出中看到“expire_home_cache”。

但片段未更新......

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

尝试将expire_fragment(:key => "news")替换为ActionController::Base.new.expire_fragment(:key => "news")

没时间解释,但它对我有用。

答案 1 :(得分:2)

你可以试试这个:

   cache("news") do    
     %h2 News
     - etc
   end

和...

def expire_home_cache
  puts "expire_home_cache"
  expire_fragment("news") 
end

......或试试这个......

 - cache({:key=>"news"}) do    
   %h2 News
   - etc

我认为问题可能是ruby或rails很难确定密钥的确切位置,因此缓存方法和expire_fragment正在生成两个不同的缓存密钥。

答案 2 :(得分:1)

这样做的正确方法是:

cache :news do

  ...
end

然后在你的清道夫中:

expire_fragment :news

答案 3 :(得分:0)

这并没有直接回答你的问题,但你是否尝试过timed_fragment_cache插件?

http://github.com/tricycle/timed_fragment_cache/tree/master

我发现这是一种在我的项目中使片段过期的简单方法。