11

mod_wsgi を介して Apache で Django を実行しています。Django がページをサーバー側にキャッシュしているため、一部の機能が正しく動作しないと思われます。

現在のサーバー時間を取得し、残りのカウントダウン時間を決定し、その数を HTML テンプレートに出力することで機能するカウントダウン タイマーがあります。JavaScript のカウントダウン タイマーが引き継ぎ、ユーザーのカウントダウンを実行します。

この問題は、ユーザーがページを更新したり、カウントダウン タイマーを使用して別のページに移動したりするときに発生します。タイマーは散発的に異なる時間にジャンプするように見え、通常は更新のたびに同じ時間に何度も戻ります。

HTTPFox を使用すると、ブラウザのキャッシュからページが読み込まれないため、Django または Apache がページをキャッシュしているように見えます。この機能を無効にする方法はありますか? スクリプト出力のキャッシュについて心配するほど十分なトラフィックはありません。それとも、なぜこれが起こっているのかについて完全に間違っていますか?

[編集] 以下の投稿から、キャッシングが Django で無効になっているように見えます。

[編集] 何が起こっているかについてのより詳細な説明があります: サーバーに対して行われた最初の 7 (またはそれくらい) の要求では、ページはスクリプトによってレンダリングされて返されますが、これらの 7 ページのそれぞれはそのままキャッシュされているようです。後で現れます。8 番目の要求で、サーバーは最初のページを提供します。9 番目の要求で、2 番目のページを提供するなど、1 サイクルで続きます。これは、プロセスが最初からやり直すときにApacheを再起動するまで続きます。

[編集] 一度に 1 つのプロセスのみを実行するように mod_wsgi を構成しました。これにより、タイマーは常に同じ値にリセットされます。興味深いことに、私のページには別のコンポーネントがあり、order('?') を使用してリクエストごとにランダムな画像を表示し、毎回異なる画像で更新します。これは、キャッシングが Apache ではなく Django で行われていることを示します。

[編集] 以前の編集に照らして、関連する views.py ファイルに戻って確認したところ、カウントダウン開始変数がビュー関数の外のモジュールでグローバルに設定されていることがわかりました。その設定をビュー関数内に移動すると、問題が解決しました。結局、キャッシングの問題ではないことが判明しました。これについてご協力いただきありがとうございます。

4

4 に答える 4

8

Apacheでのmod_wsgiの経験から、キャッシュが発生している可能性はほとんどありません。試すべきことがいくつかあります:

  1. コンピュータとWebサーバーの間に、ページを適切または不適切にキャッシュしているプロキシサーバーがある可能性があります。ISPは、ネットワーク外の帯域幅を減らすためにプロキシサーバーを実行することがあります。キャッシュされているページのHTTPヘッダーを提供していただけますか(Firebugがこれらを提供できます)。私が特に興味を持っているヘッダーには、Cache-Control、Expires、Last-Modified、およびETagが含まれます。
  2. settings.pyファイルからMIDDLEWARE_CLASSESを投稿できますか。キャッシュを実行するミドルウェアがある可能性があります。
  3. 次のアイテム「loadcache」、「django.core.cache」、および「cache_page」のコードをgrepできますか。* grep -R"search"**が機能します。
  4. settings.py(または「fromlocalsettings import *」などのインポート)にはCACHE_BACKENDが含まれていますか?
  5. apacheを再起動するとどうなりますか?(例:sudo services apache restart)。再起動によって問題が解決した場合は、キャッシュを実行している可能性があります(これにより、locmen Djangoキャッシュバックエンドもクリアされる可能性があります)
于 2009-10-28T02:25:50.777 に答える
2

Apache / mod_wsgiにマルチプロセス構成を使用していますか?もしそうなら、それは、タイマーが初期化されるときにリクエストを処理するプロセスごとに異なる可能性があるため、異なる応答がタイマーに対して異なる値を持つ可能性がある理由を説明します。したがって、なぜそれが飛び回ることができるのか。

読んでください:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

Apache / mod_wsgiを実行しているモードまたは構成を確認し、その構成を投稿してください。知らないうちに、未知数が多すぎます。

于 2009-10-28T09:45:08.253 に答える
2

Django キャッシングを具体的にセットアップしましたか? ドキュメントから、Django が機能するために事前に作業が必要なため、Django がキャッシュしているかどうかがはっきりとわかるようです。具体的には、キャッシュされたファイルが保存される場所を定義する必要があります。

http://docs.djangoproject.com/en/dev/topics/cache/

于 2009-10-27T21:25:13.267 に答える
2

私はちょうどこれに出くわしました:

自動リロードのサポート 展開ツールを支援するために、自動リロードのサポートを有効にすることができます。何かが .wsgi ファイルを変更するたびに、mod_wsgi がすべてのデーモン プロセスをリロードします。

そのためには、次のディレクティブをディレクトリ セクションに追加するだけです。

WSGIScriptReloading On
于 2013-05-25T20:16:30.577 に答える