Rails - срок действия кэша фрагментов не истекает
-
23-08-2019 - |
Вопрос
Это меня поставило в тупик.
У меня есть представление с кэшированным фрагментом:
- cache :key=>"news" do
%h2 News
- etc
У меня есть подметальная машина, которая использует:
def expire_home_cache
puts "expire_home_cache"
expire_fragment(:key => "news")
end
Очиститель вызывается, поскольку я вижу «expire_home_cache» в выводе консоли.
Но фрагмент не обновляется...
Есть идеи?
Решение
Вы можете попробовать это:
cache("news") do
%h2 News
- etc
end
и...
def expire_home_cache
puts "expire_home_cache"
expire_fragment("news")
end
...или попробуйте это...
- cache({:key=>"news"}) do
%h2 News
- etc
Я думаю, что проблема может заключаться в том, что Ruby или Rails с трудом определяют, что именно представляет собой ключ, и поэтому метод кэша и expire_fragment генерируют два разных ключа кэша.
Другие советы
Попробуйте заменить expire_fragment(:key => "news")
с ActionController::Base.new.expire_fragment(:key => "news")
Нет времени объяснять, но у меня это сработало.
Правильный способ сделать это:
cache :news do
...
end
И затем в вашей подметальной машине:
expire_fragment :news
Это не дает прямого ответа на ваш вопрос, но пробовали ли вы плагин timed_fragment_cache в качестве альтернативы?
http://github.com/tricycle/timed_fragment_cache/tree/master
Я обнаружил, что это гораздо более простой способ истечения срока действия фрагментов в моих проектах.