0

私はブロックを持っています

<% cache 'unique_key', 60.minutes.from_now do %>
  ...
  <% begin %>
    ...
  <% rescue %>
    ...
  <%end>
<% end %>

そして、以前の値がキャッシュにまだ存在しない場合にのみ、レスキュー メッセージをキャッシュする (したがって、ユーザーが表示できるようにする) ことで、実装をより堅牢にしようとしています。現在、begin ブロックの応答が何らかの理由でエラーを返した場合、ユーザーが表示したエラー メッセージをキャッシュしています。古いキャッシュデータにフォールバックしたいと思います。私が乗り越えられない問題は -

データはどこにcache保存されていますか?

を試みるたびRails.cache.read 'unique_key'に、nil戻ってきます。cache値を memcached に保存していませんか? キャッシュを画面にダンプする方法はありますか?

Railsのソースをたどることができませんでした。fragment_forのメソッドはRails 3のもののように見えたcacheので、それ以上デバッグしませんでした。

4

2 に答える 2

1

ビュー ヘルパーはcache、指定した引数に基づいてキャッシュ キーを構築します。少なくとも、接頭辞「views/」をキーに追加します。

ヘルパーを使用して、fragment_cache_keyへの呼び出しにどのキャッシュ キー レールが使用されているかを調べることができますcache。現在保存されているものを取得したい場合は、read_fragmentそれを行います。もちろん、あなたの特定の使用法では、ブロックが再度実行された場合、それは 60 分が経過したためです。キャッシュされた値は memcache から削除されています。

memcache ストアでは、現在ストアにあるすべてのキーを一覧表示することはできません。これは、memcached 自体がサポートしていないものです。

于 2012-08-03T22:59:57.153 に答える
0

fetch メソッドを使用してこれを解決しました。使った

<% Rails.cache.fetch('unique_key', :expires_in => 60.minutes){  
   begin
     ...
   rescue
     ...
   end
} %>

これを行うと、鍵を見つけることができました。見つけた を追加した後、キャッシュされたデータが見つからなかった理由はまだわかりませんfragment_cache_keyが、使用Rails.cache.fetchするとうまくいくようです。

于 2012-08-06T22:23:43.503 に答える