apache / modperl / cache

  • hallo
    ich hab apache 1.3 mit modperl erweitert und ärgere mich im Moment mit folgendem:
    wenn ich ein Skript direkt aufrufe (also /myscript.pl), werden änderungen am skript sofort übernommen.
    wenn ich allerdings dieses script über ein "require(myscript.pl)" einbinde, muss ich den Apache neu starten, um Änderungen am Skript zu übernehmen. Am Browser liegt es imo nicht (no cache - header).
    tja, das ist echt lästig, vielleicht kennt jemand das problem.
    mfg

  • Nein, das hat nix mit dem Browser zu tun. Da gibts eine Direktive in da httpd.conf in der mod_perl section, die heißt irgendwas mit PerlFreshRestart, die muß auf ON gesetzt sein. Ich hoff das is die, bin mir aber nicht sicher.

    Is das wegen einem Modul, dast in einem load_at_server_startup.pl importierst? Weil die modules im "normalen" source sind meines Wissens nach nicht von dem chaching betroffen, bis auf den namespace der variablen halt, aber das is bei mod_perl generell so, dass ein einmal uebersetztes script in einer internen sub gechached wird, deshalb hat man bei unsauberen code migrations probleme von plain cgi auf mod_perl.

    this is Unix land. In silent nights, you can hear Windows machines reboot...

  • danke für die hilfe(in den Ferien), die (empfohlene) Lösung sieht allerdings anders aus (gefunden in: cgi to modperl - porting).
    Das Problem ist folgendes: Da in der Production die Scripts normalerweise nicht geändert werden, cached mod_perl ALLE über require und use eingebundenen Scripts beim Startup, das heißt Änderungen werden nur beim Neustart des Apache Servers übernommen.
    Abhilfe schaffen zwei Apache Module zum Developing, namentlich Apache::Reload als das bessere.

    So gesehen ist das "Problem" ein beabsichtiges Verhalten des Perl-Moduls. PerlFreshRestart sollte auch funktionieren, wird aber nicht empfohlen (warum auch immer).

    Überhaupt muß ich zugeben, dass mod_perl nichts für Einsteiger ist, Fallstricke und gemeine Feinheiten gibts zuhauf (die fieseste: Globale Variablen werden pro Child-Prozess! des Webservers nur einmal initialisiert. Wenn du Pech hast, merkst du also im Development gar nichts, erst bei einem hohen Traffic in der Production treten dann Fehler auf, Abhilfe schafft sorgfältige Programmierung, -w und strict benutzen sowie error.log checken)
    Die Dokumentation ist übrigens Spitze, aber leider sehr umfangreich.
    Trotz der Schwierigkeiten ist mod_perl imho die momentan schönste Art, Web-Basierte Scripts zu schreiben.
    weiterhin schöne ferien,mfg
    ________

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!