如何确定缓存是否工作。Rails 4

7

我正在按照《Rails 4 敏捷Web开发指南》的指引进行学习,现在遇到了一个关于缓存的章节。以下是需要遵循的步骤:

  1. in config/environments/development.rb

    config.action_controller.perform_caching = true
    
  2. In app/models/product.rb

    def self.latest
        Product.order(:updated_at).last
    end
    
  3. in views/store/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.perform_caching = false时,它不存在。

GitHub代码库链接:https://github.com/BrianLobdell/depot

谢谢, Brian


那又怎样?一切似乎都正常运作了... - joni
1
书中的测试方法说要将一些东西添加到缓存块中,而这些东西不会修改产品(比如“hello”字符串),如果缓存正常工作,它就不会显示在页面上。然而,在我的情况下,“Hello”字符串确实出现了。 - user3133810
1个回答

2
Rails会在文件更改时更新缓存,所以操作缓存更容易。您可以使用Rails控制台中的页面缓存摘要检索缓存片段(摘要可能已更改,请确保使用最近的摘要!):
key = ['store', Product.latest, '6c620ede1d4e824439a7b0e3b177620f']
ActionController::Base.new.read_fragment(key)

这应该返回缓存的片段。为了确保Ruby在提供页面时实际上会命中缓存,您可以将片段替换为其他内容:

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

重新加载页面,您应该会看到“它工作了!”

抱歉,我是新手,所以我有点困惑这段代码应该放在哪里以及它确切的作用是什么。 - user3133810
我也很困惑为什么书中给出的示例代码不能按照书中描述的方式进行测试。 - user3133810
1
您可以从Rails控制台运行代码:在终端中键入rails console即可启动它。 - Stefan
这段代码的作用是:在你的视图中,<% cache ['store', Product.latest] do %> 将块渲染内容存储在片段缓存中。write_fragment"it works!" 替换此内容。这大致是作者建议的做法:更改缓存块并重新加载页面。 - Stefan
谢谢!它显示它工作了,但现在每次我运行带缓存的开发时,它都会显示“它工作了”。我应该用新的缓存摘要再做一遍同样的事情吗? - user3133810
只需删除您的应用程序的 tmp/cache 目录即可。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接