2017-01-27 6 views
0

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メソッドに何を伝えることができますか?

多くの感謝!

トム

+0

これを行うのは難しい方法です。このCMSはわかりませんが、ビュー内にキャッシュキーをいくつか作成してレディスで保存する方が簡単です。その後、オブジェクトキーを変更すると、キーが更新され、次の要求ではキャッシュキーが一致せず、ビューに新しいデータが再ロードされます。 –

+0

ちょっと@SzilardMagyar、助けてくれてありがとう。私はあなたが何を意味しているかについてはあまり確信していませんが、SOの質問、いくつかのドキュメンテーション、またはこれを行う方法を示すチュートリアルのようなものを指すことができますか? – thrgamon

+0

ここでフラグメント/ロシア人形キャッシング部分:http://guides.rubyonrails.org/caching_with_rails.html –

答えて

1

正解が実際に顔全体の時間を、私を見つめていた、私はちょうどかなりそれを実現しませんでした。私がする必要があったのは記録を通過させることでした。しかし

expire_fragment(record) 

、私が最初にそれがa digest is added to the cache when it is savedという事実に起因したしようとしたとき、それは働いていなかったことを理由。つまり、手動で期限切れにすることはできません。したがって、ビューをキャッシュするときは、ダイジェストをスキップしていることを確認する必要があります。

Et voila!できます。

関連する問題