Seite 1 von 1

apache + mod_python = Massig Probleme -.-'

Verfasst: Samstag 7. März 2009, 19:02
von AngelusNoctis
Hi

Wollte heute das erste mal Python im Web benutzen.

Mein Probleme sind nun folgender massen:

1. Muss komischerweise im eine Funktion existieren
2. Existiert keine Funktion wied die Datei nicht gefunden
3. Was hat es mit CGI auf sich?
4. Wie muss die *.py aussehen damit sie funzt?


Ich bin dieser Anleitung gefolgt: http://www.modpython.org/live/current/d ... onfig.html was auch klappt aber nur wenn eine Funktion besteht und z.B. "print" funktioniert garnicht.


Dies klappt

Code: Alles auswählen

def index(req):
 res = 10 + 10
 return res 
Dies nicht:

Code: Alles auswählen

def index(req):
 res = 10 + 10
 print res 
Dies auch nicht:

Code: Alles auswählen

 res = 10 + 10
 print res 
Wenn keine Funktion exisiert bekomm ich sogar folgende Meldung:

Code: Alles auswählen

Objekt nicht gefunden!

Der angeforderte URL konnte auf dem Server nicht gefunden werden. Sofern Sie den URL manuell eingegeben haben, überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 404
localhost
Sat Mar 7 17:45:54 2009
Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8j DAV/2 mod_python/3.3.1 Python/2.6 

In meinem Buch "Einführung in Python" ist der Code in der *.py aber ganz normal als wenn man es mit der PVM nutzen würde nur klappt das bei mir ned.

Wie zum Teufel richte ich jetzt mod_python richtig ein und wie nutz ich es richtig?
Muss alles im ordner cgi-bin sein oder wie?
Wie muss die *.py aussehen?

Verfasst: Samstag 7. März 2009, 19:07
von Leonidas
Lies den Eintrag zu mod_python in unseren FAQ, dort steht alles was man zu mod_python wissen muss :)

Verfasst: Samstag 7. März 2009, 21:30
von AngelusNoctis
Leonidas hat geschrieben:Lies den Eintrag zu mod_python in unseren FAQ, dort steht alles was man zu mod_python wissen muss :)
Hilft mir ehrlich gesagt nichts:

Weder:
[wiki]FAQ#IchHabeProblemeMitModPython[/wiki]
Noch:
[wiki]Web-Skripte zum Laufen bringen[/wiki]?highlight=(web)
Oder gar:
[wiki]Python im Web[/wiki]?highlight=(web)
[wiki]Python und die Webentwicklung[/wiki]?highlight=(web)


Toll und nu?

Verfasst: Samstag 7. März 2009, 22:04
von BlackJack
Und nu musst Du uns noch verraten warum das alles nichts hilft.

Verfasst: Samstag 7. März 2009, 22:25
von Leonidas
Ack. Ich sehe schon im ersten Wiki-Link die Lösung.

Verfasst: Sonntag 8. März 2009, 01:24
von hendrikS
Macht irgendwie einen planlosen Eindruck.

Was möchtest Du eigentlich erreichen (im Browser darstellen)?

Hast Du es überhaupt schon mal geschafft aus einem py File lauffähiges HTML zu erzeugen ind im Browser darzustellen?

Verfasst: Sonntag 8. März 2009, 06:32
von root_tux_linux
Also ich wollte Python Code eingebettet in HTML haben.

Das ganze mit Apache + mod_python

In der Apache Config hatte ich folgendes:

Code: Alles auswählen

<Directory "/srv/http/html">                                                                                                                                                                                      
    Options Indexes FollowSymLinks                                                                                                                                                                                
    AllowOverride None                                                                                                                                                                                            
    Order allow,deny                                                                                                                                                                                              
    Allow from all                                                                                                                                                                                                
    AddHandler mod_python .py                                                                                                                                                                                   
    PythonHandler mod_python.publisher                                                                                                                                                                                  
    PythonDebug On                                                                                                                                                                                                
</Directory>    

Code: Alles auswählen

LoadModule python_module /usr/lib/httpd/modules/mod_python.so 
Selbst das Test-CGI Script vom Wiki funktioniert NICHT mit *.py.

Geht nicht:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Debugging für CGI-Skripte 'einschalten'
import cgitb; cgitb.enable()

print "Content-Type: text/html;charset=utf-8\n"
print "Hello World!"

Code: Alles auswählen

root /srv/http/html/cgi-bin #  ls -la test-cgi.py
-rwxr-xr-x 1 http http 190  8. Mär 06:13 test-cgi.py
root /srv/http/html/cgi-bin #
Beim Aufrufen der Seite bekomm ich einfach nur:

Code: Alles auswählen

Objekt nicht gefunden!

Der angeforderte URL konnte auf dem Server nicht gefunden werden. Sofern Sie den URL manuell eingegeben haben, überprüfen Sie bitte die Schreibweise und versuchen Sie es erneut.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 404
localhost
Sun Mar 8 06:20:43 2009
Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8j DAV/2 mod_python/3.3.1 Python/2.6 
Die URL ist 100% richtig und das mptest.py von modpython.org funktioniert solangs in einer Funktion ist, ansonsten kommt auch "Objekt nicht gefunden".


Nach suchen im Internet fand ich nun heraus das man über PSP python in html einbetten kann und es funzt sogar.

Änderung von Apache Config:

Code: Alles auswählen

   Options Indexes FollowSymLinks                                                                                                                                                                                
    AllowOverride None                                                                                                                                                                                            
    Order allow,deny                                                                                                                                                                                              
    Allow from all                                                                                                                                                                                                
    AddHandler mod_python .psp                                                                                                                                                                                   
    PythonHandler mod_python.psp                                                                                                                                                                               
    PythonDebug On

Dies funktioniert nun:

Code: Alles auswählen

<html>
<title>Foobar</title>
<body bgcolor=000000 text="ffffff">
<%
f = open('foobar.txt', 'r')
req.write(f.read())
%>
</body>
</html>


Letzte Fragen:
Wieso funzt das Test-CGI Script nicht mit *.py? (.htaccess liegt in cgi-bin)





Mfg

Verfasst: Sonntag 8. März 2009, 10:34
von BlackJack
@root_tux_linux: Was sagen denn die Apache-Logs zu dem Fehler?

Und wenn ich mal raten müsste: Wenn Du für *.py `mod_python` als Handler angibst, funktioniert *.py als CGI nicht mehr.

Verfasst: Sonntag 8. März 2009, 22:01
von root_tux_linux
BlackJack hat geschrieben:@root_tux_linux: Was sagen denn die Apache-Logs zu dem Fehler?

Und wenn ich mal raten müsste: Wenn Du für *.py `mod_python` als Handler angibst, funktioniert *.py als CGI nicht mehr.

Code: Alles auswählen

[Sun Mar 08 06:46:41 2009] [error] [client 127.0.0.1] script not found or unable to stat: /srv/http/html/cgi-bin/test-cgi.py

Code: Alles auswählen

root /srv/http/html/cgi-bin #  ls -la test-cgi.py
-rwxr-xr-x 1 http http 1395  8. Mär 21:59 test-cgi.py

Ausserhalb von cgi-bin funzen auch nur *.psp :(

Verfasst: Sonntag 8. März 2009, 22:45
von Leonidas
Die "richtige" Lösung wäre ja, mod_python in die Tonne zu treten und eine richtiges Framework zu nehmen, nicht eine an Apache-gebundene Schrottlösung die keiner mehr nutzt.

Verfasst: Sonntag 8. März 2009, 23:02
von birkenfeld
Leonidas hat geschrieben:Die "richtige" Lösung wäre ja, mod_python in die Tonne zu treten und eine richtiges Framework zu nehmen, nicht eine an Apache-gebundene Schrottlösung die keiner mehr nutzt.
Ob die dann aber funzt?

Verfasst: Sonntag 8. März 2009, 23:21
von cofi
Genau ... wenn außerhalb von cgi-bin nur Paintshop Pro Dateien "funzen", kann das mit nem Framework auch nich klappen ... es sei denn es sind .php Dateien gemeint und Python ist nich installiert?

Verfasst: Sonntag 8. März 2009, 23:25
von Leonidas
birkenfeld hat geschrieben:Ob die dann aber funzt?
Funzt und funkelt. Gegebenfalls kann man das Ergebnis noch 'schoppen.

Verfasst: Montag 9. März 2009, 03:34
von root_tux_linux
cofi hat geschrieben:Genau ... wenn außerhalb von cgi-bin nur Paintshop Pro Dateien "funzen", kann das mit nem Framework auch nich klappen ... es sei denn es sind .php Dateien gemeint und Python ist nich installiert?
PSP = Python Server Pages .



@Leonidas

Welches Framework wäre denn zu empfehlen und gibts da deutsche tutorials?
Was'n an mod_python "schrott"?
Wie ist den z.B. youtube aufgebaut? Soll ja python nutzen.



Mfg.

Verfasst: Montag 9. März 2009, 03:51
von DasIch
root_tux_linux hat geschrieben:PSP = Python Server Pages .
Nutzt kein Mensch mehr.
Welches Framework wäre denn zu empfehlen und gibts da deutsche tutorials?
Irgendetwas dass WSGI kompatibel ist. Django, Pylons, Turbogears... die Liste ist lang. Tutorials findet man auf den entsprechenden Webseiten mit Übersetzungen wirds allerdings schwierig.
Was'n an mod_python "schrott"?
Alles.
Wie ist den z.B. youtube aufgebaut? Soll ja python nutzen.
Das wird wahrscheinlich eine WSGI Anwendung sein.

Verfasst: Montag 9. März 2009, 08:36
von jens
Ich würde mich erstmal darauf konzentrieren das CGI läuft... Alles ander (mod_Python, fastCGI und Co.) kann man später sehen...
WSGI Frameworks nutzten! Mein Vorschlag, wie immer: django, siehe: [wiki]Web-Frameworks#Django[/wiki];)
root_tux_linux hat geschrieben:Selbst das Test-CGI Script vom Wiki funktioniert NICHT mit *.py.
Von der Seite [wiki]Web-Skripte zum Laufen bringen[/wiki]:
Dem Apachen muss gesagt werden, dass Dateien mit der Endung .py CGI-Skripte sind. (Zur Not mal mit der Endung .cgi probieren.)
und weiter unten:
In einer .htaccess-Datei kann man folgendes definieren, damit Skripte auch außerhalb vom Verzeichnis cgi-bin laufen und die Endung .py statt .cgi haben dürfen:

Code: Alles auswählen

# Damit allgemein CGIs ausgeführt werden
Options +ExecCGI

# Dateien mit der Endung ".py" sind CGI-Skripte
AddHandler cgi-script .py

Verfasst: Montag 9. März 2009, 21:27
von Leonidas
root_tux_linux hat geschrieben:Welches Framework wäre denn zu empfehlen und gibts da deutsche tutorials?
Django, Pylons. Zu Django gibts es ganz sicher deutsche Tutorials. Zu Englisch gibt es ebenfalls Bücher.
root_tux_linux hat geschrieben:Was'n an mod_python "schrott"?
Das Konzept einen Interpreter wie Python in Apache-Prozesse einzubetten ist falsch, die vielen Probleme die man bekommt, allgemein wie es maintained wird (fast gar nicht, auch weil es kaum jemand nutzt), weil es einen an einen spezifischen Webserver kettet. mod_python hat nur einen Vorteil, nämlich dass man darüber auf Apache-Innereien zugreifen kann. Braucht man aber für Webapplikationen nie.
root_tux_linux hat geschrieben:Wie ist den z.B. youtube aufgebaut? Soll ja python nutzen.
Ist die Frage ob auch fürs Frontend oder nur das Backend Python nutzt.

Ist die Python Version kompatibel zu Deiner mod_python Versi

Verfasst: Dienstag 10. März 2009, 12:08
von oshoki
Ich habe die Erfahrung gemacht, dass Python 2.6 NICHT mit mod_python funktioniert. Mit Python 2.5 habe ich es zum Laufen gebracht.
Es gab da auch schon einen Artikel im Januar http://www.python-forum.de/viewtopic.ph ... ht=#124610

Verfasst: Dienstag 10. März 2009, 21:26
von root_tux_linux
Gut gut...

Dann versuch ichs mal mit Django und WSGI.


Besten Dank für die Hilfe :)