0

Django Web アプリを開発するために、アプリケーションのライブ バージョンとほぼ同じプロパティを持つアプリのステージング コピーのソース (VCS から) を自動的に更新する自律システムに移行したいと考えています。これを行う一般的な考え方は、SO #625256で既に説明されています。Django のドキュメントでは、同じ Apache で Django の 2 つのインスタンスをホストするための仮想ホストのセットアップについても説明しています。これをセットアップするために必要な部品の多くは、すでに配置されています。

具体的な質問は何ですか --このセットアップを Windows Server 2000 で実行する場合、どのサーバー ソフトウェアを選択すればよいですか?

Apache+mod-wsgi は当然の選択のようですが、 Graham Dumpleton によるこのブログ投稿によると、Windows で実行されている Apache の mog-wsgi は、個々のプロセスをリロードできず、Apache サービス全体を再起動する必要があります。ステージングのコードを更新するたびにライブサイトがドロップアウトしたくないので、これは絶対にやめてください。

この状況に最適なサーバー ソフトウェアはどれですか?

  1. 独立して再起動できる Apache の 2 つのコピーを維持します(これは気分が悪いです) ?
  2. Apache 以外に移行しますか?
  3. ???
4

2 に答える 2

2

Windows で Apache を使用する場合、「個々のプロセス」はありません。Apache ワーカー プロセスは 1 つだけです。また、Windows にもデーモン モードはありません。とにかく、それが意味することは、異なるサブインタープリターではありますが、両方の Django インスタンスが 1 つのプロセスで実行されるということです。そうです、1 つの Django サイトのコードをリロードすると、同じプロセスにあるため、他のサイトに影響を与えます。

UNIX システム上にある場合、ワーカー/デーモン プロセスに kill シグナルを送信すると、Apache 全体を再起動せずに再起動する可能性があります。UNIX では、HTTP リクエストが受け入れられるポートのリスナー ソケットと同じプロセス内の複数のサイトが常に開いたままになっている場合でも、これは過度に問題を引き起こすことはありません。ワーカー/デーモン プロセスが再び実行されています。

Windows では、当然ながら Apache 全体を再起動する必要があります。これは、非常に短い時間の間、リスナー ソケットが閉じられ、要求が接続に失敗する小さなウィンドウが存在することを意味します。これが実際にテストを行う必要があるウィンドウの長さです。リクエストがその正確な瞬間にヒットする可能性が低いほど十分に短いため、通常は大きな問題ではありません。言い換えれば、あまり頻繁に再起動することが期待されないステージング環境についてのみ話している場合、過度に心配している可能性があります。同じ Apache インスタンスで開発サイトを実行しようとしている場合、それは問題になります。

つまり、ステージング インスタンスをできるだけ本番環境に近づけたい場合でも、Apache を実行する必要があるため、異なるポートで複数の Apache インスタンスを使用することは論理的な解決策にすぎません。Django を CherryPy WSGI サーバー上で実行するか、WSGI サーバーを貼り付けてそれにプロキシすることもできますが、それは別のホスティング システムであり、本番環境のセットアップ時に最終的に発生する問題を検出できない程度に動作が異なります。

以上のことから、実際に Apache に対してベンチマークを実行し、同時に再起動を実行して、結果として失敗したリクエストの数を確認するいくつかのテストを行うことをお勧めします。これは、それがあなたが考えている大きな問題であるかどうかを理解するのに役立ちます.

于 2009-11-06T03:49:36.900 に答える
1

Django セッションは、デフォルトで、永続的で、データベースに支えられています。Web サーバーを再起動しても、セッションは中断されません。サーバーが復旧すると、ユーザーは以前と同じように処理を続行します。再起動後、Cookie によってセッション キーが提示され、データベースはセッション変数をリコールし、中断することなく続行します。

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

セッションのハイジャックが心配な場合は、有効期限を短縮し、ブラウザを閉じて Cookie を破棄し、期限切れのセッションをデータベースから定期的に消去します。

少なくとも私はそう読んだ。

最も一般的な実装に固執するのは、それが最も多くのサポートにさらされるという理由だけです。UNIX では apache+mod_wsgi だと思います。3つのうち2つを行う必要があります。明らかに、ステージングと本番は同じデータベースに接続します。

別のドメイン名で「ステージング」展開を確立することを検討しているため、興味があります。代替をすべてテストして準備ができたら、Apache conf の「サーバー名」変数を交換して稼働させます。正常な再起動により、ユーザーが気付かないことを願っています...すべての新機能が突然表示されることを除いて:-)

于 2009-11-06T10:00:30.440 に答える