这个让我难过。
我有一个缓存片段的视图:
- cache :key=>"news" do
%h2 News
- etc
我有一个清扫车使用:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
清理器被调用,因为我可以在控制台输出中看到“expire_home_cache”。
但片段未更新......
有什么想法吗?
答案 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
我发现这是一种在我的项目中使片段过期的简单方法。