Rails 2缓存视图助手不保存到memcached

时间:2012-08-03 21:23:38

标签: ruby-on-rails caching memcached

我有一个块

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

并且我试图通过缓存(并因此允许用户看到)救援消息来使实现更加健壮,如果缓存中已经没有先前的值。目前,如果开始块中的响应因任何原因发回错误,我正在缓存用户查看的错误消息。我宁愿回到旧的缓存数据。我无法解决的问题是 -

cache存储数据的位置在哪里?

每次尝试Rails.cache.read 'unique_key'时,我都会回复nilcache是否未将值存储在memcached中?有没有办法可以将缓存转储到屏幕上?

我无法关注导轨来源。在我看来fragment_for中的cache方法是轨道3的东西,因此,我没有进一步调试。

2 个答案:

答案 0 :(得分:1)

cache视图助手根据您提供的参数构造缓存键。它至少会在键上添加前缀'views /'。

您可以使用fragment_cache_key帮助程序查找用于cache任何呼叫的缓存密钥栏。如果您只想抓取当前存储的内容,read_fragment会这样做。当然,根据您的特定用法,如果您的块再次执行,那是因为60分钟已启动:缓存的值已从memcache中删除。

使用memcache存储,您无法列出当前存储中的所有密钥 - 这只是您的memcached本身不支持的内容。

答案 1 :(得分:0)

我通过使用fetch方法解决了这个问题。我用了

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

当我这样做时,我可以成功找到钥匙。我仍然不确定为什么在添加我找到的fragment_cache_key之后找不到缓存的数据,但使用Rails.cache.fetch似乎可以解决问题。