Отключить дайджесты кеша в Rails 4

Я нахожусь в процессе миграции приложения 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 появился новый фанковый вид кеширования, дайджесты кеша. Эта длинная шестнадцатеричная строка в конце представляет собой дайджест md5 некоторого представления, которое Rails хочет связать с этим фрагментом кэша.

Я считаю, что мне не нужны дайджесты кеша. Мое приложение обновляется довольно редко, и, как правило, я могу очистить кеш при его обновлении, поэтому концепция фрагмента кеша, который ссылается на версию моего кода представления предыдущей версии, не имеет значения.

Я вижу, что я могу изменить любой вызов cache с :skip_digest => true флаг. Этот пост в блоге относится к изменению большого количества их cache призывы добавить :skip_digest, Но я верю, что хочу применить этот флаг к каждому звонку cache в моем приложении. Наверняка должен быть какой-то способ просто повсеместно отключить дайджесты кеша?

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
Другие вопросы по тегам