【问题标题】:How to tell if Caching is working. Rails 4如何判断缓存是否有效。导轨 4
【发布时间】:2014-06-05 18:44:56
【问题描述】:

我正在关注“使用 Rails 4 进行敏捷 Web 开发”指南,并来到了关于缓存的部分。以下是要遵循的步骤:

  1. 在 config/environments/development.rb 中

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

    def self.latest
        Product.order(:updated_at).last
    end
    
  3. 在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

git hub 仓库链接:https://github.com/BrianLobdell/depot

谢谢, 布赖恩

【问题讨论】:

  • 那又怎样?一切似乎都正常......
  • 书中的测试方法是在缓存块中添加一些不修改产品的内容(如“hello”字符串),如果缓存正在工作,它就不会显示这页纸。但是,就我而言,“Hello”字符串确实出现了

标签: ruby-on-rails ruby caching ruby-on-rails-4


【解决方案1】:

Rails 在更改文件时会更新缓存,因此更容易操作缓存。

您可以在 Rails 控制台中使用页面的缓存摘要检索缓存片段(摘要可能已更改,请确保使用最近的!):

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

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

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

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

【讨论】:

  • 对不起,我是新手,所以我对这段代码应该去哪里以及它到底做了什么有点困惑。
  • 我也很困惑为什么书中示例中给出的代码不能按照书中描述的方式进行测试。
  • 您从Rails console 运行代码:在终端中输入rails console 以启动它。
  • 这段代码的作用:在您看来&lt;% cache ['store', Product.latest] do %&gt; 将块的渲染内容存储在片段缓存中。 write_fragment 将此内容替换为 "it works!"。这或多或少是作者的建议:更改缓存块并重新加载页面。
  • 谢谢!它显示它有效,但现在每次我使用缓存运行开发时,它都会显示“它有效”。我应该对新的缓存摘要再次做同样的事情吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 2012-11-26
相关资源
最近更新 更多