Подтвердить что ты не робот

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Rails.cache.clear

Ответ 3

От консоли рельсов:

Rails.cache.delete 'FRAGMENT-NAME'

Ответ 4

На консоли:

Вы можете запустить это (т.е. если вы знаете, что идентификатор равен "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])