Ответ 1
В итоге я вручную очистил весь кеш, перейдя в консоль рельсов и используя команду:
Rails.cache.clear
Я использую Memcached с Heroku для приложения Rails 3.1. У меня была ошибка, и показывались неправильные вещи - параметры были неверны для кеша.
У меня было это:
<% cache("foo_header_cache_#{@user.id}") do %>
Я удалил кеширование фрагментов и нажал на Heroku, и плохие данные исчезли.
И затем я изменил его на:
<% cache("foo_header_cache_#{@foo.id}") do %>
Однако, когда я исправил параметры, от @user до @foo, старая [некорректная] кешированная версия снова показала (вместо обновления с правильными данными).
Как я могу вручную истечь это или иначе избавиться от этих плохих данных, которые отображаются?
В итоге я вручную очистил весь кеш, перейдя в консоль рельсов и используя команду:
Rails.cache.clear
Здесь вы находитесь:
<% ActionController::Base.new.expire_fragment("foo_header_cache_#{@user.id}") %>
Справка:
- Как вызвать expire_fragment из Rails Observer/Model?
От консоли рельсов:
Rails.cache.delete 'FRAGMENT-NAME'
На консоли:
Вы можете запустить это (т.е. если вы знаете, что идентификатор равен "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
от любых объектов (до yyyymmddhhmsms). Это будет нечто вроде "views/foo_header_cache/users/1-20160901021000"
Или просто очистите его с помощью массива.
ActionController::Base.new.expire_fragment([:foo_header_cache, @user])