这个让我难住了。
我有一个缓存片段的视图:
- cache :key=>"news" do
%h2 News
- etc
我有一台扫地机,它使用:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
清扫器被称为,因为我可以在控制台输出中看到“expire_home_cache”。
但是片段没有更新......
有任何想法吗?
这个让我难住了。
我有一个缓存片段的视图:
- cache :key=>"news" do
%h2 News
- etc
我有一台扫地机,它使用:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
清扫器被称为,因为我可以在控制台输出中看到“expire_home_cache”。
但是片段没有更新......
有任何想法吗?
尝试替换expire_fragment(:key => "news")为ActionController::Base.new.expire_fragment(:key => "news")
没有时间解释,但它对我有用。
你可以试试这个:
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 正在生成两个不同的缓存密钥。
正确的方法是:
cache :news do
...
end
然后在你的扫地机中:
expire_fragment :news
这并不能直接回答您的问题,但是您是否尝试过 timed_fragment_cache 插件作为替代方案?
http://github.com/tricycle/timed_fragment_cache/tree/master
我发现这是在我的项目中使片段过期的一种更简单的方法。