Я использую кэширование фрагментов, чтобы ускорить время рендеринга удобного мексиканского дивана. Однако я не могу понять, как заставить его истечь кеш для определенного объекта при его обновлении.
Я использую Comfy в качестве CMS для веб-сайта компании, который я создаю. Чтобы разрешить динамическое содержимое страницы, я настроил его таким образом, чтобы каталоги страниц отображались как блоки контента.
class WelcomeController < ApplicationController
def index
@testimonials = Comfy::Cms::Page.find_by_full_path!("/testimonials").children
@clients = Comfy::Cms::Page.find_by_full_path!("/clients").children
@recent_blogs = Comfy::Cms::Page.find_by_full_path!("/blog").children.published.last(4)
@team = Comfy::Cms::Page.find_by_full_path!("/team").children
end
end
Затем я визуализирую коллекции с помощью cms_block_content
помощников, предоставленных CMS.
<% @clients.each do | client |%>
<img class="client__logo lazy" data-original="<%=cms_block_content(:client_logo, client).file.url%>">
<%end%>
Я также ввел некоторое кэширование фрагментов, поскольку весь встроенный рендеринг сильно замедлял загрузку страницы.
Однако я столкнулся с проблемой. Когда я создаю или удаляю новый контент, он появляется/исчезает на странице в порядке, однако, когда я обновляю контент, контент на странице не обновляется. Обновление содержимого, похоже, не истечет срок действия кэшированного содержимого (если вы запустите Rails.cache.clear
, то загружается обновленное содержимое).
Я рассмотрел возможность создания очистки кеша как указано в документации CMS, но я не совсем понял, как поступить, так как не знаю, какие параметры передавать фактическому методу expire_fragment
.
class CmsAdminSweeper < ActionController::Caching::Sweeper
observe Comfy::Cms::Page
def after_update(record)
do_sweeping(record)
end
def do_sweeping(record)
# return unless modification is made from controller action
return false if session.blank? || assigns(:site).blank?
Rails.logger.info("CmsAdminSweeper.do_sweeping in progress...")
expire_fragment({ controller: '/welcome', action: 'index', id: record.id})
end
end
Это лучший способ продолжить? Если да, то что я могу передать методу expire_fragment?
Большое спасибо!
Том
Rails.cache.clear
вместо очистки просто фрагмент в качестве обходного пути. - person thrgamon   schedule 02.02.2017