devの注意:キャッシュをクリアすることを忘れないでください!


この投稿はDEV CodeBaseに貢献したい人のためであり、キャッシュがどのように機能しているかについての注意が必要です.
我々は、エッジのキャッシュのために信頼キーサービスとして記載されていることを除いて、(まだ)でキャッシュに関する多くの情報を持っていない.その小さいメモは理論的に何を考慮するべきか、そして、どのようにdev上でキャッシュするかを知るために経験豊富なRails devに十分な情報を与えます、しかし、たぶん、後輩は完全に失われます.
あなたが私のようなBootcamp卒業生であるならば、キャッシングは全くあなたのカリキュラムでポップアップしなかったかもしれません--それは、キャッシングが本当にあなたのアプリが多くの交通を提供するまで、あなたが考える必要がある何かでないからです.だから、キャッシュの一般的な概念に精通していない場合は、最初にケビンKononenkoでこの素晴らしい記事をお読みください.


グレート.
devでは、我々のコンテンツ配信ネットワークを介して、キャッシュを大きく頼る.これはあなたのDEV . to要求はあなたの場所(サーバーによって提供されるサーバーは、当社の最も一般的な要求のためのファイルを格納する代わりに、最も近いプロキシサーバーを打つ)を意味します.あなたの要求は、起源をヒットする必要がある場合でも、我々はまた、静的な、準備情報を格納するレールによって提供されるボックスのキャッシュ機能に依存しています.これは、ブラウザ、CDN、およびRailsは、すべての新鮮な資産のための基本的なコードに直接前に要求を満たすために一緒に働いていることを意味します.Browser Cache > CDN > Rails Cache > Underlying Codeこれはすべて、かなり従来のFastly and Rails ドキュメントは、より多くの学習のための素晴らしいリソースです.
あなたがdevの上で働いているならば、それは尋ねる価値があります:「これはキャッシュされなければなりませんか?または逆の“キャッシュをクリアする必要がありますか?”我々はこの記事のために後者に集中するつもりです.
最近、私は2人のユーザーをマージする機能を構築していました--時々、TwitterとGithubを介してログインしています.かなり簡単なプロセス
  • アカウントBからすべての活動をBに移します.
  • アカウント削除.
  • 以上のようにして、アカウントAのプロフィールを訪問すると、ユーザーの統合活動を見ることができると思います.いや!私は、アカウントBのデータの全てが削除されたと思う一時的なパニックを起こしました.私のコードでは、要求が新鮮なデータを受信しなかったので、私は致命的なキャッシュをクリアするためにシグナルを出さなかった.はい、ユーザープロファイル(/username)はキャッシュされています.つまり、そのページ上の何かを変更するたびにキャッシュをクリアする必要があります.
    我々は、定期的にパージする必要がある項目のいくつかの便利な方法と一緒に、それは簡単に私たちの致命的なキャッシュをパージすることができますキャッシュバウンドオブジェクトがあります.ファイルです.app/labor/cache_buster.rb これはすべての論理を扱います.ユーザープロファイルにキャッシュをクリアする方法を示しますCacheBuster.new.bust("/jess") .
    アカウントAのユーザープロファイルのパスをクリアしたとき、すべての統合された活動を見ることになった.それはほとんどの場合でした--記事、バッジとコメントは現れました、しかし、社会的なアイコンの1つはなくなっていました(特定のアカウントBの独自のログイン方法).ユーザデータの低レベルレールキャッシュを利用します.私はアカウントのプロファイルを更新したときにキャッシュをクリアした'保存'コールバックを実行しませんでした.このRailsキャッシュをクリアするには、ユーザを正式に更新する必要がありましたuser.touch は通常通ります.
    私は、開発において絶え間ないキャッシュを実行することは可能ではないと思いますが、トグルで単純な熊手タスクでレールのキャッシュを走らせることは可能ですbin/rails dev:cache .
    つの最後のもの:このすべてを除いて、我々も宝石と呼ばれる使用してCounterCulture . この宝石のような関連カウントの追跡articles_count ユーザーとそれは私たちより速くクエリに役立ちます.時々、これらのカウントは同期しません(あなたがユーザー活動を更新するとき、あなたが適切なコールバックを走らないように...).これがあなたに起こるならば、あなたは直接数を更新することができます.例えば、
    user.articles_count = user.articles.size
    
    これは私たちのキャッシュポリシーの'逆'ビューのビットだったが、私はそれがdevのアプリにいくつかの洞察を提供してほしい.