1


我正在关注“使用 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”字符串,为什么会这样?我不应该看到吗?

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

4

2 回答 2

0

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

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

当您更改config.cache_classes为 时false,您只是告诉 Rails 不要为每个请求自动重新生成视图。这就是您停止看到更改的原因,这不是因为“缓存”工作正常。

于 2015-01-16T23:25:43.647 回答
0

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

于 2013-11-09T11:46:48.507 回答