【问题标题】:Why isn't caching activating in my Rails dev environment?为什么我的 Rails 开发环境中没有激活缓存?
【发布时间】:2014-06-27 17:12:18
【问题描述】:

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

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

【问题讨论】:

  • 在您的日志中,您是否看到诸如“读取片段视图/...”、“缓存写入:视图/...”、“写入片段视图/...”、“缓存读取”之类的语句: 意见/..."?
  • 啊——是的。连同此消息...`找不到用于摘要的模板:pages/magazine_header.html web.1 |杂志/next_previous_nav.html 的缓存摘要:5249e7d094a7d8ca543dd1 web.1 |找不到用于摘要的模板:layout_partials/layout_partial.html web.1 | pages/show.html 的缓存摘要:314c806fcbb207d41137bc46f0856db0 web.1 |缓存读取:views/pages/199-20140614104931344003000/314c806fcbb206f0856db0 web.1 |阅读片段视图/页面/199-20140614104931344003000/314c806f46f0856db0 (1.1ms)` - 关闭谷歌...

标签: ruby-on-rails memcached


【解决方案1】:

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。我怀疑使用这些版本也可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多