我正在尝试使用Dalli和memcache在开发中设置缓存。
我已经安装了memcached,可以从Rails控制台“
访问它> Rails.cache.write 'test', 'asdfasdf'
Cache write: test
Dalli::Server#connect 127.0.0.1:11211
=> 360287970189639680
> Rails.cache.read 'test'
Cache read: test
=> "asdfasdf"
我已经安装了memcachier和dalli gems:
gemfile.rb
gem 'dalli'
gem 'memcachier'
我更新了development.rb以指示缓存激活:
development.rb
config.action_controller.perform_caching = true
config.cache_store = :dalli_store, '127.0.0.1'
但是,如果我将其中一个视图文件包装并将内容包装在缓存块中,它似乎不会影响页面呈现:
- cache @page do
%h1 @page.title
%p @page.contents
如果我检查服务器日志,则没有任何数据库调用。我还希望由于缓存密钥仅依赖于@page
模型,因此对模板的任何更改都不会在浏览器中显示,但它们会显示。如果我改变内容并刷新浏览器,它会立即更新。
我错过了什么,为什么不进行缓存?
在cache digests documentation中,引用了无法派生的显式依赖项和模板。我认为这可能是我的问题,控制台显示的信息如下:
18:39:10 web.1 | Couldn't find template for digesting: pages/magazine_header.html
18:39:10 web.1 | Cache digest for magazines/next_previous_nav.html: 5249e7d094aafe2365a097d8ca543dd1
18:39:10 web.1 | Couldn't find template for digesting: layout_partials/layout_partial.html
18:39:10 web.1 | Cache digest for pages/show.html: 314c806fcbb207d41137bc46f0856db0
18:39:10 web.1 | Cache read: views/pages/199-20140614104931344003000/314c806fcbb207d41137bc46f0856db0
18:39:10 web.1 | Read fragment views/pages/199-20140614104931344003000/314c806fcbb207d41137bc46f0856db0 (1.2ms)
18:39:10 web.1 | Rendered pages/show.html.haml within layouts/magazine (8.4ms)
我不是立即确定如何解决这个问题,但会调查......
答案 0 :(得分:0)
Rails 4在使用隐式模板渲染确定模板依赖关系时并不太聪明。在您链接的文档中提到了它。您需要在视图中使用特殊注释格式:
<%# Template Dependency: pages/magazine_header %>
它还可以帮助使用显式形式的模板渲染。 Rails很可能能够自己推断出正确的部分。
# change this:
<%= render 'pages/magazine_header' %>
# into this:
<%= render partial: 'pages/magazine_header' %>
好消息是自Rails 5.0.4和5.1.3以来,implicit template rendering got a lot smarter。我怀疑使用这些版本也会解决你的问题。