Отключить дайджесты кеша в 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