mod_python testen ob installiert ?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 20. März 2006, 17:59

Nur noch mal um das klarzustellen:

CGI = Common Gateway Interface

Das ist keine Programmiersprache, sondern eine Interface-Spezifikation wie ein Server die Daten eines Requests an ein dynamisches Programm weitergibt. CGI ist an keine Programmiersprache gebunden...
--- Heiko.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 20. März 2006, 18:12

Hi Seven!

Noch etwas:

In den Ordner, in dem die "AUSFÜHRBARE" Python-Datei liegt, musst du eine Datei mit dem Namen ".htaccess" (beachte den Punkt) erstellen. In diese Datei schreibst du

Code: Alles auswählen

Options +ExecCGI
AddHandler cgi-script .py
Damit wird dem Apachen gesagt, dass Dateien mit der Endung ".py", mit dem Python-Interpreter auszuführen sind. Schon werden in dem Ordner Python-Dateien als CGI-Dateien ausgeführt.

Wichtig:
1. Python-Dateien müssen als "Ausführbar" gekennzeichnet sein.
2. Der Apache muss auf die Datei zugreifen und diese ausführen können.
3. Dem Apachen muss gesagt werden, dass Dateien mit der Endung ".py" CGI-Skripte sind.
4. Die erste Zeile der Python-Datei müss dem Apachen zeigen, mit welchem Programm das Skript auszuführen ist.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 21. März 2006, 10:22

modelnine hat geschrieben:...
CGI = Common Gateway Interface

Das ist keine Programmiersprache, sondern eine Interface-Spezifikation wie ein Server die Daten eines Requests an ein dynamisches Programm weitergibt. CGI ist an keine Programmiersprache gebunden...
Das ist ja schon mal eine wichtige und beruhigende Erkenntnis :) Leider bekomme ich noch nicht einmal dieses supersimple Test-CGI zum Laufen:

Code: Alles auswählen

#!/usr/bin/python2.4
print "Content-type: text/html"
print

print "<html>"
print "<body>"
print "<h1>CGI Test</h1>"
print "</body>"
print "</html>"
Es kommt folgende Fehlermeldung:

Code: Alles auswählen

Object not found!

The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.

If you think this is a server error, please contact the webmaster.
Error 404
localhost
Tue Mar 21 08:51:22 2006
Apache/2.0.54 (Linux/SUSE)
In meiner 'default-server.conf' steht:

Code: Alles auswählen

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

# "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/srv/www/cgi-bin">
	AllowOverride None
	Options +ExecCGI -Includes
	Order allow,deny
	Allow from all
</Directory>
Gruss, Seven
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 21. März 2006, 11:03

snakeseven hat geschrieben: Es kommt folgende Fehlermeldung:

Code: Alles auswählen

Object not found!
In meiner 'default-server.conf' steht:

Code: Alles auswählen

<Directory "/srv/www/cgi-bin">
	AllowOverride None
	Options +ExecCGI -Includes
	Order allow,deny
	Allow from all
</Directory>
Hi Seven!

Vorab: Verwende nicht das CGI-BIN-Verzeichnis. Das ist durch die Einstellung AllowOverride None so eingeschränkt, dass du keine ".htaccess"-Datei verwenden kannst um die Einstellungen zu ergänzen oder zu überschreiben.

Das Einfachste wird sein, wenn du deine Tests in einem eigenen Ordner durchführst.

Welcher der Apache-Root-Ordner ist, findest du über die Konfigurationsdatei des Apachen raus. Suche nach "DocumentRoot". Das ist dann normalerweise der Ordner der Aufgerufen wird, wenn du im Browser "http://localhost/" eingibst.

Erstelle dir unterhalb des Apache-Root-Ordners einen neuen Ordner, in dem du dein Skript ausprobieren kannst. Nicht vergessen: ".htaccess"-Datei erstellen; Ausführbar; für Apache lesbar.

Wenn dein Skript im Unterordner "mein_testordner" liegt und "mein_testskript.py" heißt, dann sollte die URL http://localhost/mein_testordner/mein_testskript.py" greifen.

Ob es allerdings bei Suse erlaubt ist, ".htaccess"-Dateien zu verwenden, weiß ich nicht, da ich schon ein paar Jahre lang kein Suse mehr in der Hand hatte.

Folgendes sollte immer funktionieren:

Ändere deine "default-server.conf" so um, dass dieser Block so aussieht:

Code: Alles auswählen

<Directory "/srv/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    Order allow,deny
    Allow from all
    AddHandler cgi-script .py
</Directory>
und starte den Apachen neu. Dann kannst du dein Skript in den CGI-BIN-Ordner legen und ausprobieren.
http://localhost/cgi-bin/skriptname.py

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 21. März 2006, 11:25

Hi Gerold,
erstmal Danke für die schnelle Antwort !
Habe zunächst die einfachere (2.) Variante ausprobiert, aber leider ohne Erfolg. Fehlermeldung:
The server encountered an internal error and was unable to complete your request.

Error message:
Premature end of script headers: cgitest.py


Die 'default-server.conf' habe ich vorher entsprechend geändert und den Server mit '/etc/init.d/apache2 restart' neu gestartet.

Das CGI-Modul wird korrekt in 'loadmodule.conf' geladen und ein Perl-Script in der cgi-bin wird auch korrekt ausgeführt. Wat nu ?

Gruss, Seven

P.S. Nochwas: bei meinen Python-Scripten musste ich die shebang auf '#!/usr/bin/env python' setzen, damit sie laufen. Jetzt lautet sie (oder der ?) '#!/usr/bin/python2.4'. Ich verstehe den Unterschied nicht ?
Zuletzt geändert von snakeseven am Dienstag 21. März 2006, 11:29, insgesamt 1-mal geändert.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 21. März 2006, 11:27

Guck dir mal die Apache-Error Log an.
-Sind die Zeilenenden richtig?
-Ist der Pfad zum Python Interpreter richtig?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 21. März 2006, 11:48

jens hat geschrieben:Guck dir mal die Apache-Error Log an.
-Sind die Zeilenenden richtig?
-Ist der Pfad zum Python Interpreter richtig?
Also das sagt Folgendes:

Code: Alles auswählen

[Tue Mar 21 10:32:31 2006] [error] [client 127.0.0.1] (2)No such file or directory: exec of '/srv/www/cgi-bin/cgitest.py' failed
[Tue Mar 21 10:32:31 2006] [error] [client 127.0.0.1] Premature end of script headers: cgitest.py
Der Pfad '/usr/bin/python2.4' ist richtig. Es gibt da zwar auch noch ein 'python', ohne '2.4', aber auch das ändert nichts.
Was meinst du mit Zeilenenden ?

Gruss, Seven
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 21. März 2006, 11:48

snakeseven hat geschrieben:Error message:
Premature end of script headers: cgitest.py
Hi Seven!

Diese Meldung kenne ich. Die tritt auf, wenn du eine CGI-Datei im Windows erstellst und/oder mit einem Editor bearbeitest, der "\r\n" als Zeilenumbruch macht. Unix, Linux und Co. arbeiten aber mit "\n" als Zeilenumbruch.
Du musst nur die überflüssigen "\r" aus dem Skript entfernen -- dann sollte es funktionieren.

Siehe auch:
http://www.python-forum.de/viewtopic.php?p=26042#26042
http://www.python-forum.de/viewtopic.php?p=5334#5334
http://www.bastet.com/ (suche nach dos2unix)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 21. März 2006, 11:58

Puhh, das wars !
Wie soll man auf sowas kommen, schließlich werden die Steuerzeichen nicht mit angezeigt !? Komisch war, das ein Löschen der Zeilenenden und Erzeugen eines neuen Zeilenumbruchs in Kate den Fehler nicht behoben hat. Ich habe das Ganze dann nochmal in Scite eingetippt und dann gings.

Also, Vielen Dank (!!) für eure Geduld und Hilfe. Ich hoffe, ich komme jetzt alleine weiter. Ansonsten muss ich euch wieder ein bischen nerven :wink:

Grüße, Seven
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 21. März 2006, 12:03

In Scite geht das eh ganz einfach!

Anzeigen kannst du dir die Endungszeichen mit View / End Of Line

Ändern kannst du es so:
-Stell unter Options / Line Ending Characters auf LF um.
-dann Options / Convert Line Endings Characters

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 21. März 2006, 12:24

Weil das Problem schon öfters aufgetaucht ist, hab ich mal eine Wiki-Seite gemacht:

http://wiki.python.de/Web-Skripte_zum_laufen_bringen

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten