缓存不适用于Rails 4.0

时间:2013-11-09 10:31:08

标签: ruby-on-rails caching


我正在关注“使用Rails 4进行敏捷Web开发”一书,我在第105页关于缓存的问题。 我在index.html.erb

中有以下代码
<% if notice %>
  <p id="notice"><%= notice %></p>
<% end %>

<h1>Your Pragmatic Catalog</h1>

<% cache ['store', Product.latest] do %>
    <% @products.each do |product| %>
     <% cache ['entry', product] do %>
      <div class="entry">
        <%= image_tag(product.image_url) %>
        <h3><%= product.title %></h3>
        <%= sanitize(product.description) %>
        <div class="price_line">
            <span class="price"><%= number_to_currency(product.price) %></span>
        </div>
      </div>
    <% end %>
  <% end %>
<% end %>

第一个疑问如下:
1)cache ['store', Product.latest]到底做了什么?它创建了一个缓存,可以从所有StoreController操作中获得,名为“store”,并将缓存与Product.latest相关联:我为什么要做最后一件事?为什么我需要将缓存关联到Product.latest?

这本书总是在同一页上说:“至于验证这是否有效,遗憾的是没有太多东西可以看。如果你去那个页面,你应该看不到任何改变,这实际上就是重点!最好的你可以做的是在缓存块内的任何位置更改模板,而不更新任何产品并验证您没有看到该更新,因为页面的缓存版本尚未更新“。


所以我尝试过这样的事情:

<% cache ['store', Product.latest] do %>
  "hello"
  ........
  ........
<% end %>

但我仍然得到这个更新,页面显示“hello”字符串,为什么会这样?我不应该看到它吗?

P.S。显然我编辑了config/environments/development.rb并重新启动了服务器

2 个答案:

答案 0 :(得分:0)

在生产模式下启动应用程序,您将看到缓存有效。 你在development.rb中编辑了什么?请将它与production.rb进行比较并复制粘贴所有缓存配置属性。

答案 1 :(得分:0)

我有同样的“问题”,我认为这本书所说的不正确。据我所知,即使缓存处于活动状态,您在网站上看到更改的原因是Rails 4使用缓存摘要。有关更多信息,请查看:

http://blog.remarkablelabs.com/2012/12/russian-doll-caching-cache-digests-rails-4-countdown-to-2013

当您将config.cache_classes更改为false时,您只是告诉Rails不会自动为每个请求重新生成视图。这就是为什么你不再看到变化,这不是因为“缓存”工作正常。