Я только недавно обновил свой проект с Rails 4 до Rails 5.2.Проходя тесты, я заметил, что кэши не обновляются там, где они должны.
Просматривая документацию, я заметил некоторые различия в том, как ActionView выполняет кеширование.
В Rails 4 естьupdated_at
значение в имени кеша.При этом при каждом касании элемента предыдущий кеш устаревает и создается новый кеш.
views/projects/123-20120806214154/7a1156131a6928cb0026877f8b749ac9
^class ^id ^updated_at ^template tree digest
Отлично.Но в Rails 5.2 появились некоторые изменения, когда значение updated_at больше не указывается в имени кэша.Из документации:
views/template/action.html.erb:7a1156131a6928cb0026877f8b749ac9/projects/123
^template path ^template tree digest ^class ^id
Тем не менее, в документации говорится:
При касании проекта updated_at изменяется cache_version, даже если ключ остается стабильным.Это означает, что в отличие от традиционного подхода с истечением срока действия кэша на основе ключей, вы не будете создавать мусор кеша, неиспользуемые ключи, просто потому, что обновлена зависимая запись.
Исходя из этого, я полагаю, что это делаетнекоторые под капот магии, чтобы заменить значение из кэша, но это не так.
Мой код:
<% cache ['tags', post] do %>
<%= render "shared/tags", post: post %>
<% end %>
Даже когда я post.touch
на моей консоли, кэш все ещеостается старый, и я должен удалить кэш вручную, чтобы он работал.Я что-то пропустил?Как мне заставить его работать снова?
Я знаю, что могу сделать что-то вроде
cache "tags/#{post.updated_at}" do
...
, но из документации это не так.