我有一个块
<% cache 'unique_key', 60.minutes.from_now do %>
...
<% begin %>
...
<% rescue %>
...
<%end>
<% end %>
并且我试图通过缓存(并因此允许用户看到)救援消息来使实现更加健壮,如果缓存中已经没有先前的值。目前,如果开始块中的响应因任何原因发回错误,我正在缓存用户查看的错误消息。我宁愿回到旧的缓存数据。我无法解决的问题是 -
cache
存储数据的位置在哪里?
每次尝试Rails.cache.read 'unique_key'
时,我都会回复nil
。 cache
是否未将值存储在memcached中?有没有办法可以将缓存转储到屏幕上?
我无法关注导轨来源。在我看来fragment_for
中的cache
方法是轨道3的东西,因此,我没有进一步调试。
答案 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
似乎可以解决问题。