CGI bzw. Perl ausserhalb CGI-BIN

netsrac

New Member
Hallo,

ich ziehe aktuell auf einen anderen Server um (Vserver mit ubuntu). Ich lasse die Seite (perl) ausserhalb des cgi-bin Ordners laufen und habe dafür den entsprechenden Eintrag in der vhost.conf. Funktionierte ja auch bisher. Auf dem neuen Server habe ich jetzt jedoch das Problem das die selbst geschriebenen Module (im gleichen Verzeichnis) nicht gefunden werden. Im error_log steht Can't locate ... . Im Script steht schon use lib '.';

Woran kann das noch liegen?

Ein Script ohne Aufruf eigener Module laufen Problemlos.

Gruß
 
Die Meldung "Can't locate .." kann auch bedeuten, daß das Modul nicht lesbar ist. Hast Du geprüft ob Leserechte für alle bzw. den ausführenden User bestehen?

Ansonsten könntest Du auch folgenden BEGIN-Block ganz vorne in Dein Skript nehmen um weitere Details der Umgebung im error_log zu sehen:
Code:
BEGIN {
    use Cwd;
    print STDERR
        "UserID: $> ($<)\n",
        "Working Directory: ", getcwd(), "\n",
        "Include Directories: ", join("   ", @INC), "\n";
}

AFAIR(?) - Wenn das Skript unter mod_perl läuft ist das Ändern von @INC zur Laufzeit nicht so einfach möglich.
 
Code:
use lib '.';
ist nicht so sinnvoll.
Nimm den kompletten Pfad zu deinen eigenen Modulen, das erspart dir Ärger.
 
Hallo,

danke nochmal für die Hinweise. Mod_perl war das Stichwort. Habe den Dreck deaktiviert und schon funktioniert es.
 
Wieso Dreck? mod_perl ist fein, nur nix für Grünschnäbel. ;)
Perl-unerfahren?

Naja, ich bin Sicherheit nicht der Profi. Arbeite aber schon seit 10 Jahren mit einem 200 Dateien großen Script. Habe da schon einiges Modifiziert.

Wenn ein in cgi-perl geschriebenes Programm nicht so ohne weiteres mit mod_perl läuft ist das für mich wertlos.

Das fängt schon bei dem schlichten einbinden von eigenen Modulen an.

In der Codingwelt reden immer alle von Standard, solche Module tuen aber wenig dazu. Und ja, ich habe gelesen das mod_perl mehr strict ist.
 
Wenn ein in cgi-perl geschriebenes Programm nicht so ohne weiteres mit mod_perl läuft ist das für mich wertlos.
Hust hust.... Da gibt es auch einen Umkehrschluss:
Wenn ein Script nicht unter mod_perl läuft, ist es nicht sauber programmiert.
Es geht dabei nicht nur um "mehr strict" sondern um volles strict und multithreadable (z.B. keine globalen Variablen ohne sie selbst zu initialisieren, etc. pp).

Insgesamt hat man den Vorteil, dass es mit mod_perl deutlich schneller läuft und es persistente DB-Connections nutzen kann.

huschi.
 
Wenn ein in cgi-perl geschriebenes Programm nicht so ohne weiteres mit mod_perl läuft ist das für mich wertlos.
Du hast keine Ahnung, was mod_perl ist. Denn dann machst du was falsch beim Konfigurieren von mod_perl oder gar beim Programmieren deiner Perl-CGI.

Das fängt schon bei dem schlichten einbinden von eigenen Modulen an.
was kannst du denn bei use falsch machen? Kapiere ich nicht. Und bestimmt Apache::Reload ignoriert.

Und ja, ich habe gelesen das mod_perl mehr strict ist.
Mit Perl kann man schlampig arbeiten, muss es aber nicht. Ja, wenn du schlampig arbeiten willst, dann darfst du weder mod_perl, use strict noch use warnings benutzen. Perl lässt viel zu oder nicht, das liegt an dir. ;)

Arbeite aber schon seit 10 Jahren mit einem 200 Dateien großen Script. Habe da schon einiges Modifiziert.
Und bist du auch mit deinem Lernprozess seit Perl 5.6 weiter gekommen, was Perl mittlerweile kann?
 
Last edited by a moderator:
Back
Top