【问题标题】:Disable cache digests in Rails 4在 Rails 4 中禁用缓存摘要
【发布时间】:2014-09-14 22:38:52
【问题描述】:

我正在将 Rails 3 应用程序迁移到 Rails 4。迁移过程非常顺利,但我遇到的一个大问题是我的旧 Rails 3 代码无法使缓存过期。我收到的日志如下:

Expire fragment views/localhost:3000/cardsets/36?action_suffix=edityes (0.0ms)
...
Read fragment   views/localhost:3000/cardsets/36?action_suffix=edityes/d8034b6e68ba30b5916a2ebb73b68ffe (0.0ms)

事实证明,这是因为 Rails 4 带来了一种新奇的缓存,即缓存摘要。末尾的那一长串十六进制是 Rails 想要与此缓存片段关联的某些视图的 md5 摘要。

我相信我不需要缓存摘要。我的应用程序很少更新,通常我可以在更新时清除缓存,因此缓存片段的概念与我的一段视图代码的先前部署版本无关。

我发现我可以使用:skip_digest => true 标志修改对cache 的任何给定调用。 This blog post是指修改他们大量的cache调用添加:skip_digest。但我相信我想将此标志应用于我的应用程序中对cache 的每一次调用。当然必须有某种方法来普遍禁用缓存摘要?

【问题讨论】:

    标签: ruby-on-rails caching ruby-on-rails-4 memcached cache-digests


    【解决方案1】:

    最简单的方法是修改cache_fragment_name 方法,使skip_digest 默认为true。为了在需要时使用 md5 摘要,您只需将 skip_digest 设置为 false

    module ActionView
      module Helpers
        module CacheHelper
          def cache_fragment_name(name = {}, options = nil)
            skip_digest = options && !options[:skip_digest].nil? ? options[:skip_digest] : true
    
            if skip_digest
              name
            else
              fragment_name_with_digest(name)
            end
          end
        end
      end
    end
    

    【讨论】:

    • 看起来不错!我会试一试,看看它是否有效。我需要把它放在 config/initializers 目录之类的地方,对吧?
    • 效果很好!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2013-10-26
    相关资源
    最近更新 更多