1

我正在将 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 摘要。

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

我看到我可以cache使用该:skip_digest => true标志修改任何给定的调用。这篇博文提到修改他们的大量cache调用 add :skip_digest。但我相信我想将此标志应用于cache我的应用程序中的每个调用。当然必须有某种方法来普遍禁用缓存摘要?

4

1 回答 1

3

最简单的方法是对方法进行猴子补丁,以便cache_fragment_name默认情况下。为了在需要时使用 md5 摘要,您只需设置为skip_digesttrueskip_digestfalse

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
于 2014-09-14T23:51:51.570 回答