2009-05-22 22 views
1

これは私に困ってしまった。私はコンソール出力に「expire_home_cache」を見ることができるようRails - フラグメントキャッシュが期限切れにならない

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

スイーパーが呼ばれた:私は使用していますスイーパーを持って

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

私は、キャッシュされたフラグメントとの見解を持っています。

しかし、フラグメントが更新されない...

任意のアイデア?

答えて

2

あなたはこの試みる場合があります:

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

...

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

と...

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

を...またはこれを試してみてください、私は問題があることも考えていますそのルビやレールは、キーが正確に何であるかを判断するのに苦労しているので、キャッシュメソッドとexpire_fragmentは2つの異なるキャッシュキーを生成していますys。

+0

:true) '。 – Kris

4

ActionController::Base.new.expire_fragment(:key => "news")

で説明する時間がないがexpire_fragment(:key => "news")を交換しない試してみてください、それは私のために働きました。

+0

ウィッシュ私はこれ以上upvoteできます...魅力のように働いた! – concept47

+0

上記の作業を行うには、cache_sweeper:whatever_sweeper ---をapplication_controller.rbに入れてください。 – concept47

+0

私は、この回答を試してみるまで、スイーパーが子供連合のためにキャッシュを失効させるという説明できないインスタンスを持っていました。なぜか分からない。 expire_fragmentコードと同様に、スイーパコールバックが呼び出されていました。奇妙な – twmills

1

これを行うための適切な方法は次のとおりです。あなたのスイーパーで

cache :news do 

    ... 
end 

そして:あなたも `キャッシュ( "ニュース"、skip_digestを行う必要があるかもしれませんRailsの4.xで

expire_fragment :news 
+0

キーは文字列ではなくシンボルでなければなりませんか? –

+0

これを文字列またはシンボルにすることはできますが、ハッシュである必要はありません。 –

関連する問題