Очистка фрагмента кеша в 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
Вот ты где:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
Из консоли:
Вы можете запустить это (то есть, если вы знаете, идентификатор равен "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])