在Rails 4中禁用缓存摘要

时间:2014-09-14 22:38:53

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

我正在将Rails 3应用程序迁移到Rails 4.迁移过程非常顺利,但我遇到的一个大问题是我的旧Rails 3代码使我的缓存过期并不是#39;工作。我得到的日志如下:

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摘要。

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

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

1 个答案:

答案 0 :(得分:3)

最简单的方法是对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