2012-02-16 10 views
0

私はいくつかのキャッシュを実装しているサイトを持っています。Railsフラグメントキャッシュ戦略

可能であれば、私はアクションキャッシングを使用しました。モデル作成/更新時に必要なアクションを終了するために、掃除機を用意しました。

:私は、このフラグメントを期限切れにしようとしています

video_sweeper
<% cache('video_content') do %> 
    Some content here 
<% end %> 

:部分内私のようなものを持っているように、私はまた、フラグメントは、いくつかのパーシャルをキャッシュしているcaches_actionの対象となっている景色の中で

expire_fragment('video_content') 

このフラグメントは期限切れではありません。

私はすでにcaches_actionを使用しているため、何らかの理由でフラグメントが無視されていますか?つまり、caches_actionまたはフラグメントキャッシュを使用するかどうかを選択する必要がありますか?

この場合、この部分が表示されるすべてのアクションビューを期限切れにする必要があります。これは、私の掃除機がメンテナンスの頭痛だけでなく、複雑になることを意味します。

私の悩みは主に、私の掃除機から呼び出されたときに私のフラグメントキャッシュが期限切れにならない理由です。なぜなら私はcaches_actionも使用しているからですか?

更新: 私のログをさらに調べると、スイーパが私のフラグメントを期限切れにしていることが実際に分かります。

Expire fragment views/video_content (0.7ms) 

ただし、有効期限前にコンソールで再生すると、フラグメントが存在しないように見えます。

ruby-1.9.2-p136 :004 > Rails.cache.exist?('views/video_content') 
=> false 

繰り返しますが、これは私が部分的にはほとんどアクションがキャッシュされるように、有効期限が切れている場合を除き、ヒットしないことを私はcaches_actionを使用していますので、と思います。

答えて

1

アクションキャッシュは、技術的には、フラグメントをラップするフラグメントキャッシュのタイプです。したがって、フラグメントが期限切れになる可能性がありますが、アクションキャッシュが期限切れになるまで表示されません。

フラグメントが期限切れになるようにするには、アクションも期限切れにする必要があります。しかし、フラグメントキャッシングは目的がないわけではありません。アクションが期限切れになると、キャッシュされたフラグメントが使用されます。

0

アクションキャッシュは完全なアクションをキャッシュします。したがって、コントローラアクション( 'show_video')でアクションキャッシュを使用し、同じビュー "show_video"にフラグメントキャッシュを追加することは、それほど効果がありません。それらを賢明に使うべきです。

フラグメントキャッシュが期限切れになったと言いましたが、アクションが呼び出されると、キャッシュされたアクションがレンダリングされます。したがって、あなたのケースでは、アクションキャッシュも期限切れにする必要があります。私はあなたがビデオを通過することをお勧め

はグレッグポラックによって答えをcheck this out

+0

感謝をキャスト。これらの動画をチェックします。ありがとうございます。 – Pete