1

の下でいくつかのFastCGIスクリプトを実行mod_fcgidしていますが、スクリプトに変更を加えるたびにそれらを自動的に再ロードしたいと思います。

の下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と、ユーザーにエラーが発生するため、どちらも実行されません。

前もって感謝します、

–マイケル

4

2 に答える 2

4

それを行う正しい方法は少し微妙です。その方法については、 Plack :: Loader :: Restarterを参照することをお勧めします。または、アプリを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アプリを作成する方がさらに優れていますが、このバージョンを使用すると、ほとんどのアプリを書き直す必要がなくなります)。

于 2012-03-20T14:44:46.147 に答える
2

私はこれをまったく試していませんがModule::Refresh、あなたのmod_fcgid目的のために働くでしょうか?

于 2012-03-12T22:22:29.993 に答える