【发布时间】:2014-04-22 04:06:15
【问题描述】:
我正在阅读《使用 Rails4 进行敏捷 Web 开发》一书,我刚刚阅读了关于缓存部分视图以避免压倒数据库的(第一)部分。 我当然在开发环境的配置中将缓存选项设置为 true。
问题是缓存似乎不起作用。 这是我的 app/views/store/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 %>
这里是 rails 服务器日志,清楚地表明数据库被多次访问(尽管有一行提到缓存):http://pastebin.com/v2jGiHKL
这是我的 app/views/store/index.html.erb 文件,我在其中尝试了其他缓存:
<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>
<h1>Your Pragmatic Catalog</h1>
<% cache('caching') do %>
<% @products.each do |product| %>
<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 %>
这里是对应的日志,显示缓存成功(因为没有查询到数据库):http://pastebin.com/ZTk9A9RA
有人可以解释为什么一个似乎工作而不是另一个,或者第一个应该如何工作?谢谢你:)
请注意,书中说启用缓存后,如果更改是在缓存块内进行的,则重新加载商店页面不应显示 store/index.html.erb 的新部分;但在这两种情况下都是如此。有什么想法吗?
【问题讨论】:
-
在您的第一个日志中只有一个
GET "/"。你能告诉我们控制器吗? -
是不是因为第二种情况我只访问了一次页面,第一种情况我只访问了两次? (在这种情况下,你的意思是相反的,对吧?)无论如何,这是我的控制器:pastebin.com/J6dpxe7D 和 pastebin.com/aKTUFX82
标签: ruby-on-rails ruby caching ruby-on-rails-4