Ruby on rails 在Rails 4中禁用缓存摘要

Ruby on rails 在Rails 4中禁用缓存摘要,ruby-on-rails,caching,ruby-on-rails-4,memcached,cache-digests,Ruby On Rails,Caching,Ruby On Rails 4,Memcached,Cache Digests,我正在将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/d8034b6e68ba30b5916

我正在将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)
这是因为Rails4带来了一种新的时髦的缓存,缓存摘要。末尾的长十六进制字符串是Rails希望与此缓存片段关联的某个视图的md5摘要

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


我发现我可以使用
:skip_digest=>true
标志修改对
缓存的任何给定调用。指修改大量的
缓存
调用以添加
:skip_digest
。但我相信我希望将此标志应用于应用程序中对
缓存的每个调用。肯定有什么方法可以完全禁用缓存摘要

最简单的方法是对
cache\u fragment\u name
方法进行猴子补丁,以便默认情况下
skip\u 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目录一样的地方,对吗?工作得很好!非常感谢:)