Wie starte ich ein Perl-Skript neu, das unter mod_fcgid ausgeführt wird, wenn es geändert wurde?

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

  •  12-12-2019
  •  | 
  •  

Frage

Ich führe einige FastCGI-Skripte unter aus mod_fcgid, und ich möchte, dass diese automatisch neu geladen werden, wenn ich Änderungen am Skript vornehme.

Unter mod_fastcgi, können Sie konfigurieren

FastCgiConfig -autoUpdate

genau das zu tun, aber mod_fcgid hat eine solche Option nicht.Hat jemand eine gute Problemumgehung dafür?

Das Beste, was mir eingefallen ist, ist:

while (my $cgi = CGI::Fast->new()) {
    processRequest($cgi);
    exit if -M $0 < 0;  # restart if script changed
}

die beendet wird, nachdem eine weitere Anfrage bearbeitet wurde.Dies ist jedoch nicht ideal, insbesondere wenn mehrere Instanzen des Skripts ausgeführt werden. Es kann eine ganze Weile dauern, bis alle alten Instanzen erneut ausgeführt und beendet werden können.

Wenn ich das mache exit Vor processRequest, erhält der Benutzer eine Fehlermeldung, also ist das auch nicht der Fall.

Dank im Voraus,

– Michael

War es hilfreich?

Lösung

Der richtige Weg, es zu tun, ist ein wenig subtil.Ich würde empfehlen, einen Blick darauf zu werfen Plack::Loader::Restarter Erfahren Sie, wie es geht, oder noch besser: Passen Sie Ihre App so an, dass sie auf Plack läuft, und starten Sie sie dann einfach mit Plackups -r Option zum automatischen Laden des Restarters.Das Anpassen Ihrer App ist möglicherweise einfacher als erwartet, möglicherweise genauso einfach wie das Ändern

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

Zu

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

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

(Eine richtige native PSGI-App zu schreiben ist noch schöner, aber diese Version erspart Ihnen das Umschreiben des größten Teils Ihrer App.)

Andere Tipps

Ich habe das überhaupt noch nicht ausprobiert, würde es aber tun Module::Refresh Arbeit für Sie mod_fcgid Zwecke?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top