1

実稼働サーバーとして組み込みモードのApacheを使用しています。

djangoコアファイル(、、、など)にいくつかの変更を加えると、urls.py単にsettings.pyproject.wsgiviews.pyファイルtouchを作成するだけで、変更がWebページに即座に表示されます。時々それは動作します。

ただし、そうでない場合もあります。Apacheがハングします。リクエストを処理できず、再起動が必要です(ユーザーに「内部サーバーエラー」メッセージを1〜2秒間表示します)。次に、再起動する必要があります(再起動しますが、実際には機能しません。停止して再起動する必要があります)。

私は自分のコードを貼り付けていますhttpd.conf

MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
WSGIDaemonProcess myproject processes=4 threads=12 python-path=[...]
WSGIProcessGroup myproject
WSGIRestrictEmbedded On

何故ですか?Apacheがすべてのプロセスを同時に使用し、コアファイルをリロードできない場合があるためですか?(これは「タッチ」が行うべきことですよね?)

編集:ごめんなさい。Apacheは埋め込みモードで実行されます。私の間違い。質問を更新しました。

EDIT2:含まれてWSGIProcessGroupいる行

4

2 に答える 2

2

WSGIスクリプトファイルに触れても、埋め込みモードでは何も実行されないため、常に機能するとは限りません。表示される場合、それは、以前に要求を処理したことがない新しいApacheプロセスによって要求が処理されたということだけです。

WSGIスクリプトファイルをタッチして機能させるには、デーモンモードを使用する必要があります。ただし、構成は半分壊れています。デーモンモード用にWSGIDaemonProcessを定義しましたが、WSGIProcessGroupを使用してそのデーモンプロセスグループで実行するようにアプリケーションを委任していません。

読んでください:

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

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process

于 2012-05-28T11:32:14.503 に答える
1

*.pyc強制的に更新されるため、ファイルを削除する方が簡単です。ただし、問題に対する本当の答えは適切な展開戦略であるため、本番サーバーで開発を行うことになりません。

このサーバーをdjango専用で使用している場合は、nginx+uwsgiまたはnginx+gunicornのセットアップをお勧めします。これにより、Web環境がバックエンドから分離され、サーバーに影響を与えることなくwsgiプロセスを自由に再起動できます。また、優れたダウンタイムページを表示することもできます。

于 2012-05-28T11:04:18.993 に答える