2012-08-03 76 views
0

我有一個塊Rails的二級緩存視圖助手不保存到memcached的

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

,我試圖讓實現更穩健的只緩存(從而允許用戶查看),如果救援消息緩存中已經沒有以前的值。目前,如果begin塊中的響應由於某種原因發回錯誤,我將緩存用戶查看的錯誤消息。我寧願回退到舊的緩存數據。我無法逾越的問題是 -

cache存儲數據在哪裏?

每次我嘗試Rails.cache.read 'unique_key'時,我得到nil回來。 cache是不是將值存儲在memcached中?有沒有一種方法可以將緩存轉儲到屏幕上?

我無法遵循rails源代碼。在我看來,cache中的fragment_for方法是一個rails 3的東西,因此我沒有進一步調試。

回答

0

我使用fetch方法解決了這個問題。我用

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

當我這樣做,我可以成功找到鑰匙。我仍然不確定爲什麼在添加fragment_cache_key後找不到緩存的數據,但使用Rails.cache.fetch似乎有效。

1

cache視圖助手根據您給它的參數構造一個緩存鍵。至少它將前綴'views /'添加到密鑰。

您可以使用fragment_cache_key幫助程序找出緩存鍵軌用於撥打cache的任何呼叫。如果您只想抓取當前存儲的內容,則可以使用read_fragment。當然對於你的特殊用法,如果你的塊被再次執行,那是因爲60分鐘到了:緩存值已經從memcache中刪除。

使用memcache存儲區,您無法列出當前存儲區中的所有密鑰 - 這只是memcached本身不支持的內容。

+0

當我使用'fragment_cache_key('a')'時,我收回'views/a'。然而,'views/unique_key'仍然返回零。也許還有其他事情發生? – 2012-08-03 23:37:55

+0

您是否打開了緩存?(默認情況下它處於開發模式) – 2012-08-03 23:40:42

+0

我想我其實不知道。我需要mem_cache_store並運行memcached。雖然 – 2012-08-03 23:53:22