我正在关注“使用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
并重新启动了服务器
答案 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不会自动为每个请求重新生成视图。这就是为什么你不再看到变化,这不是因为“缓存”工作正常。