1

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

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

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

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

ответ

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 
+0

Выглядит хорошо! Я попробую и посмотрю, работает ли это. Мне нужно было бы разместить это где-то, как каталог config/initializers, не так ли? – AlexC

+0

это правильно :) – jvnill

+0

Работал отлично! Большое спасибо :) – AlexC

Смежные вопросы