2014-06-05 62 views
5

我正在跟随'带有Rails 4的敏捷Web开发指南'指南,并且谈到了关于缓存的部分。下面是要遵循的步骤:如何判断缓存是否正常工作。 Rails 4

  1. 在配置/环境/ development.rb

    config.action_controller.perform_caching = true 
    
  2. 在应用程序/模型/ product.rb

    def self.latest 
        Product.order(:updated_at).last 
    end 
    
  3. 的意见

    /存储/index.html.erb

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

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

但是,当我尝试在缓存块中的代码中添加一个“Hello”字符串时,它会出现在页面上,我已经完成了所有的服务器重新启动以及没有完成的操作。主办我看到这行

Cache digest for app/views/store/index.html.erb: 6c620ede1d4e824439a7b0e3b177620f 

这不是他们的,当我有 config.action_controller.pe rform_caching =假

链接到git的枢纽回购:改变文件的时候,所以它更容易操纵,而不是缓存https://github.com/BrianLobdell/depot

谢谢你,布莱恩

+0

那又如何?一切似乎工作...... – joni

+1

在本书中测试的方式表示,将某些东西添加到未修改产品的缓存块中(如“hello”字符串),并且如果缓存正在工作,则不会显示这一页。但是,在我的情况下,“Hello”字符串确实出现 – megacanyon

回答

2

Rails的更新缓存。

您可以使用缓存消化在你的Rails控制台的页面检索缓存片段(摘要可能已经改变,确保使用最近的一个!):

key = ['store', Product.latest, '6c620ede1d4e824439a7b0e3b177620f'] 
ActionController::Base.new.read_fragment(key) 

这应该返回缓存分段。为了确保红宝石实际命中缓存提供该页面时,你可以用一些其他内容替换片段:“它的工作原理”

ActionController::Base.new.write_fragment(key, 'it works!') 

刷新页面,你应该看到

+0

对不起,我对此很陌生,所以我对这段代码应该到哪里以及它究竟做什么感到有点困惑。 – megacanyon

+0

我也很困惑,为什么书中示例中给出的代码无法按照本书描述的方式进行测试。 – megacanyon

+1

您可以从[Rails控制台](http://guides.rubyonrails.org/command_line.html#rails-console)运行代码:在终端中输入“rails console”以启动它。 – Stefan

相关问题