Как мне истечь время просмотра кэшированного фрагмента из консоли?

Что-то вроде

Rails.cache.delete('site_search_form')

не похоже на работу. Это возможно? Благодарю.

5 ответов

Решение

Записи фрагментов кэша создаются с ключом, немного отличающимся от того, к которому вы обращаетесь с помощью Rails.cache.

использование expire_fragment вместо этого (вы можете отправить его на контроллер): http://api.rubyonrails.org/classes/ActionController/Caching/Fragments.html

ActionController::Base.new.expire_fragment(ключ)

Rails.cache.delete "views/site_search_form"

В Rails 5 я предпринял следующие шаги, чтобы разрушить кеш, не прибегая к skip_digest: true, Наша проблема заключалась в том, что изменение значения строк I18n не отражается в вычисленном дайджесте кэша, поэтому кэш не будет автоматически отключен.

Вот вид, где определен блок кеша:

/ views/layouts/_footer.html.slim
- cache :footer do
  span= t('shared.footer')

Затем в консоль рельсов я бегу:

fragment = ActionController::Base.new.view_context.cache_fragment_name(:footer, virtual_path: 'layouts/_footer.html.slim')
ActionController::Base.new.expire_fragment(fragment)

cache_fragment_name выясним дайджест на основе virtual_path Ключевой аргумент.

Другой вариант, если вы используете Redis в качестве хранилища кэша, — это поиск и удаление из Redis напрямую с помощью командыkeysметод.

      # get direct Redis client from Rails cache store
redis = Rails.cache.redis

# search for your key
keys = redis.keys.grep(/site_search_form/)

# delete the keys
keys.each do |key|
  redis.del(key)
end
Другие вопросы по тегам