2

多くのユーザーが Google マップを表示する Web アプリを作成しており、サーバーへの ajax リクエストを通じてマップ上の更新が取り込まれます。外部サーバーからデータをスクレイピングする必要があり、2〜3分ごとに更新するだけでよいため、ユーザーに送信される応答をキャッシュしたいと考えています。

したがって、1 人がデータを要求するとすぐに、他のすべてのユーザーからの後続のすべての要求が、次の 2 ~ 3 分間キャッシュから取得されるようにします。このチュートリアルに従って、Heroku を使用して Sinatra で Rack::Cache と Dalli gem をセットアップする方法を詳しく説明しています。次のようにセットアップされたページでテストを実行すると、

cache_control :public, max_age: 3000

キャッシュ ヘッダーが (Google Chrome 開発者ツールを使用して) 正しく取得されていることを確認できますが、更新を押すか、別のコンピューターからページを要求すると、コンテンツが明らかに再生成されました (Time.now 出力を配置しました)。ただし、別のページに移動してから URL を再入力すると、コンテンツは再生成されません。ブラウザは結果をキャッシュしていると思いますが、memcache サーバーはキャッシュしていませんか? キャッシングの仕組みについて根本的な誤解がありますか?

4

1 に答える 1

0

この質問に出くわした人のために、問題の解決に役立つ可能性のあるスレッドをいくつか示します(助けてくれました)。

ブラウザで「更新」すると、「Cache-Control: max-age=0」が発生します: https://groups.google.com/forum/#!topic/rack-cache/sWHyu4pYwKw

キャッシュのクリアとキャッシュディレクトリの削除 (これは私にとってはうまくいきました): https://github.com/rails/rails/issues/5245

rspec / other Sinatra、Rack::Test、Conditional GET リクエストで仕様を追加する

于 2015-04-20T04:30:13.907 に答える