Comfortable Mexican Sofaのレンダリング時間を短縮するために、フラグメントキャッシングを使用しています。しかし、特定のオブジェクトを更新するときにキャッシュを期限切れにする方法を理解できません。快適なメキシコのソファで更新時にフラグメントキャッシュを期限切れにするにはどうすればよいですか?
私が構築している会社のウェブサイトのCMSとしてComfyを使用しています。動的なページのコンテンツを許可するために、私はそれを設定して、ページのディレクトリをコンテンツのブロックとしてレンダリングします。
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によって指定されたcms_block_content
ヘルパーを使用してコレクションをレンダリングしています。
<% @clients.each do | client |%>
<img class="client__logo lazy" data-original="<%=cms_block_content(:client_logo, client).file.url%>">
<%end%>
私はまた、レンダリングが大規模ページの読み込みが遅くたすべてのインラインとして、いくつかの断片のキャッシュを導入しました。
しかし、私は問題に遭遇しました。新しいコンテンツを作成または削除すると、ページ上に表示されたり消えたりしますが、コンテンツを更新すると、ページのコンテンツは更新されません。コンテンツを更新しても、キャッシュされたコンテンツは期限切れになっていないようです(Rails.cache.clear
を実行すると、更新されたコンテンツが読み込まれます)。
キャッシュスウィーパーas posited in the CMS documentationを作成しましたが、どのようなパラメータを実際の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メソッドに何を伝えることができますか?
多くの感謝!
トム
これを行うのは難しい方法です。このCMSはわかりませんが、ビュー内にキャッシュキーをいくつか作成してレディスで保存する方が簡単です。その後、オブジェクトキーを変更すると、キーが更新され、次の要求ではキャッシュキーが一致せず、ビューに新しいデータが再ロードされます。 –
ちょっと@SzilardMagyar、助けてくれてありがとう。私はあなたが何を意味しているかについてはあまり確信していませんが、SOの質問、いくつかのドキュメンテーション、またはこれを行う方法を示すチュートリアルのようなものを指すことができますか? – thrgamon
ここでフラグメント/ロシア人形キャッシング部分:http://guides.rubyonrails.org/caching_with_rails.html –