Очистка фрагмента кеша в Rails вручную

Я использую Memcached с Heroku для приложения Rails 3.1. У меня была ошибка, и неправильные вещи показывают - параметры были неправильными для кеша.

У меня было это:

<% cache("foo_header_cache_#{@user.id}") do %> 

Я удалил фрагмент кэширования и отправил его в Heroku, и плохие данные исчезли.

И тогда я изменил это на:

<% cache("foo_header_cache_#{@foo.id}") do %> 

Однако, когда я исправил параметры, от @user до @foo, старая [неверная] кэшированная версия снова показалась (вместо обновления с правильными данными).

Как я могу вручную истечь это, или иначе избавиться от этих плохих данных, которые показывают?

4 ответа

Решение

В итоге я вручную очистил весь кеш, зайдя в консоль rails и выполнив команду:

Rails.cache.clear

С консоли рельсов:

Rails.cache.delete 'FRAGMENT-NAME'

Вот ты где:

<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>

Ссылка:
Вызвать expire_fragment от Rails Observer/Model?

Из консоли:

Вы можете запустить это (то есть, если вы знаете, идентификатор равен "1")

ActionController::Base.new.expire_fragment("foo_header_cache_1")

Использовать Rails.cache.delete вам нужно знать имя фрагмента. В вашем случае это было бы

Rails.cache.delete("views/foo_header_cache_1") # Just add 'views/' to the front of the string

Если у вас есть ключ кеша на основе массива, использующий объекты, такие как:

cache([:foo_header_cache, @user])

Тогда вы можете получить название фрагмента так

ActionController::Base.new.fragment_cache_key([:foo_header_cache, @user])

Имя включает в себя id а также updated_at время от любых объектов (до ггггммдччммсс). Это было бы что-то вроде "views/foo_header_cache/users/1-20160901021000"

Или просто очистите его с помощью массива.

ActionController::Base.new.expire_fragment([:foo_header_cache, @user])
Другие вопросы по тегам