3

Plack を使用して Apache2 で実行される PSGI スクリプトをデプロイしたいと考えています。Apache は次のように構成されています。

<Location "/mypath">
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app  /path/to/my/script.psgi
</Location>

plackup でスクリプトをテストすると、--reloadパラメーターはファイルの更新を監視し.psgiます。実稼働環境では、パフォーマンス上の理由から、Apache と Plack が変更のたびにチェックして再起動しなくても問題ありませんが、再起動するように、Plack::Handler::Apache2または PSGI スクリプトに新しいバージョンをデプロイするように明示的に指示するにはどうすればよいでしょうか?

Plack は定期的にいくつかの変更をチェックしているようですが、それがいつなのかはわかりません。script.psgiまた、複数のインスタンスを作成しているように見えるため、 when atのバージョンが異なる場合があります/mypath。Apache を再起動したり、不明な時間待機したりすることなく、perl 応答ハンドラーを手動でフラッシュすると便利です。

4

3 に答える 3

7

短い答えは、あなたができないということです。そのため、迅速な開発には plackup (-r を使用) を使用し、Apache はデプロイ (本番環境での使用) にのみ使用することをお勧めします。

もう 1 つのオプションは、Apache プロセスを開発し、MaxRequestsPerChild を非常に小さな値に設定して、非常に短い時間で新しい子を生成することです。私はこれをテストしていませんが、同じプロセスで実行されている非開発アプリケーションを実行すると、httpd 全体のパフォーマンスに確実に影響します (そもそもこれは悪い考えです)。

于 2011-05-25T20:10:47.590 に答える
1

アプリケーションを apache プロセスから移動できます。

FastCgiExternalServer /virtual/filename/fcgi -socket /path/to/my/socket

プログラムを実行する

plackup -s FCGI --listen /path/to/my/socket --nproc 10 /path/to/my/script.psgi

これにより、Apache を再起動せずにアプリケーションを再起動できます。

メイン fcgi プロセスの pid を保存すると (--pid $pid_file)、新しいコードのロードを簡単に再開できます。

すべての fcgi プールを管理 (開始、停止、再起動) するためのモジュールもあります: https://metacpan.org/pod/FCGI::Engine::Manager::Server::Plackup (未テスト)

于 2012-05-08T18:44:27.130 に答える
1

Apache2::リロード(未テスト)

于 2011-05-25T12:34:54.267 に答える