为什么不在我的Rails开发环境中激活缓存?

时间:2014-06-27 17:12:18

标签: ruby-on-rails memcached

我正在尝试使用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)

我不是立即确定如何解决这个问题,但会调查......

1 个答案:

答案 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。我怀疑使用这些版本也会解决你的问题。