2013-11-09 36 views
1


我正在关注'使用Rails 4开发敏捷Web开发'一书,并且我在第105页关于缓存。
我在index.html.erb缓存不起作用Rails 4.0

<% 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

您在此期间是否添加了更多产品?也就是说,'Product.latest'是否改变了? –

+0

不,我什么也没加 – zer0uno

回答

0

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

+0

改变'config.cache_classes = false'我解决了 – zer0uno

0

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

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

当你改变config.cache_classesfalse,你刚才讲的Rails为不自动重新生成每个请求的意见。这就是为什么你停止看到变化,这不是因为“缓存”工作正常。