2012-08-03 43 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