【问题标题】:Rails 3 Fragment Caching Output IssueRails 3 片段缓存输出问题
【发布时间】:2011-09-01 11:46:16
【问题描述】:

我在使用 memcached 查看 Rails 3.0.4 应用程序中的片段级缓存时遇到了问题。我对正在发生的事情有点困惑,但我认为这与从缓存区域内提取输出的方式有关。我在 -vv 模式下在本地运行 memcached,并且可以看到正确保存/提取片段的密钥,问题是 memcached 中项目的值。

这是我正在做的事情:

< ... html before ... >
<%= cache("item_#{i.id}") do %>
    <%= render :partial => 'shared/item', :locals => { :item => i, :functionality => [:set_as_default] } %>
<% end %>
< ... html after ... >

当我查看缓存中键的值时,它具有来自该片段缓存块中的页面内的 html,但也在该页面之外(来自 html before 和 html after 区域)。这是有趣的部分,这也是我认为它与捕获输出有关的原因——它不会处理整个页面,只是之前和之后的一些 html。

根据 rails 片段缓存指南,我认为我做的事情是正确的(http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)。有人对可能发生的事情有想法吗?

非常感谢您的帮助!

-埃里克

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 memcached


    【解决方案1】:

    在这种情况下,您错误地使用了 ERB。基本上去掉=符号。你所做的是你也返回了块的值,因此你看到了双重输出。

    此外,ActiveRecord 对象响应内部烘焙的 #cache_key 方法。尝试利用这一点。 ActiveRecord 对象的默认 #cache_key 也使用类名、对象 id 和 updated_at 时间戳。缓存方法应该能够接受多个参数或一个数组,并且它会为响应它的每个对象依次调用 cache_key 。使用此方法,这意味着您将在对象更新为时缓存未命中,非常酷的东西。所以,IIRC

    【讨论】:

    • 杰夫,你太棒了......这真的让我很沮丧。事实证明,我不仅需要删除缓存上的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2012-03-07
    相关资源
    最近更新 更多