変更時にmod_fcgidの下で実行されているPerlスクリプトを再起動する方法

StackOverflow https://stackoverflow.com//questions/9675286

  •  12-12-2019
  •  | 
  •  

質問

mod_fcgidの下にFastCGIスクリプトを実行しています。スクリプトに変更を加えるたびに、それらが自動的にリロードする必要があります。

mod_fastcgiでは、

を設定できます。
FastCgiConfig -autoUpdate
.

それを正確にするが、mod_fcgidはそのようなオプションを持っていません。 誰もがこのために良い回避策を持っていますか?

私が思いついた最高のものは、次のとおりです。

while (my $cgi = CGI::Fast->new()) {
    processRequest($cgi);
    exit if -M $0 < 0;  # restart if script changed
}
. もう1つの要求を処理した後に終了します。しかし、これは理想的ではありません、特にスクリプトの複数のインスタンスが実行されている場合、それはすべての古いインスタンスがもう一度実行する機会がある前にかなりの時間がかかるかもしれません。

exitの前にprocessRequestを実行すると、ユーザーはエラーを獲得しますので、どちらもできません。

事前にありがとう、

- Michael

役に立ちましたか?

解決

それをする正しい方法は少し微妙です。私はPlack::ローダー::リスタータのための方法を見て推薦しますPlack上で実行するためにアプリを適応させるか、またはPlackupの-rオプションで起動するようにアプリを適応させてください。あなたのアプリを適応させることはあなたが期待するよりも簡単かもしれません。

use CGI::Fast;
while (my $cgi = CGI::Fast->new) {
    processRequest($cgi);
}
.

use CGI::Emulate::PSGI;
use CGI;

my $app = CGI::Emulate::PSGI->handler(sub {
    my $cgi = CGI->new;
    processRequest($cgi);
});
.

(適切なネイティブPSGIアプリを書くことはさえもいいですが、このバージョンはあなたのアプリのほとんどを書き換えることから保存します)。

他のヒント

私はこれをまったく試していませんが、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top