ubuntuusers.de

Apache2 mit mod_python

Status: Gelöst | Ubuntu-Version: Server 9.04 (Jaunty Jackalope)
Antworten |

Kaktus621

Anmeldungsdatum:
22. Mai 2005

Beiträge: 39

Hallo!

Ich habe ein Problem mit meinem Apache Webserver. Ich möchte die Unterstützung für Python-Skripts einbauen, klingt ja an sich ganz einfach. Im Internet findet man auch unzählige Anleitungen dazu. Diese habe ich befolgt, allerdings wird das aufgerufene Python-Skript weiterhin einfach nur als Download angezeigt, anstatt ausgeführt zu werden.

Folgendes habe ich gemacht:

1) Das Paket libapache2-mod-python installiert. Dieses legt auch den Nötigen Link des Python-Moduls nach "mods-enabled". Der Link heißt übrigens "python.load" und nicht, wie ich oftmals gelesen habe, "mod-python.load". Dann habe ich die default Datei bei "sites-available" editiert, und im /var/www Teil folgende drei Zeilen ergänzt:

AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On

Anschließend ein "sudo /etc/init.d/apache2 restart" und es sollte ja eigentlich funktionieren... tut es allerdings nicht! Was kann man da machen?

Vielen Dank.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Hast du die Anleitung im Wiki schon gesehen? dir fehlt wahrscheinlich der Befehl

sudo a2enmod mod_python

Kaktus621

(Themenstarter)

Anmeldungsdatum:
22. Mai 2005

Beiträge: 39

Hab mal folgendes gemacht:

martin@k621:~$ sudo a2enmod mod_python
[sudo] password for martin:
ERROR: Module mod_python does not exist!

martin@k621:~$ sudo a2enmod python
Module python already enabled

Daraufhin in der Konfigurationsdatei default auch mal statt mod-python nur python hingeschrieben, trotzdem leider kein Erfolg.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Bei mir klappt es, wenn ich eine .htaccess mit diesem Inhalt in entsprechenden Verzeichnis für den Content anlege:

PythonHandler mod_python.publisher

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

mod_python solltest du nicht verwenden, dieses Apachemodul birgt leider viele Fallstricke. Es wäre besser, wenn du deine Pythonanwendungen mittels mod_wsgi an den Apache binden würdest. Näheres über die Hintergründe dazu kannst du auch unter http://wiki.python-forum.de/HelpOnInstalling/ApacheWithModWSGI und im Python Forum finden.

Kaktus621

(Themenstarter)

Anmeldungsdatum:
22. Mai 2005

Beiträge: 39

Irgendwie funktionier gerade garnichts. Die .htaccess Methode hat nicht funktioniert, daraufhin erstmal mod-python und alle gemachten Änderungen entfernt.

Nun versuche ich das WSGI Modul zu installieren, allerdings habe ich da auch ein wenig probleme. Installieren tue ich mit einem:

apt-get install libapache2-mod-wsgi

Soweit, so gut. Im mods-available Ordner des Apachen erscheint auch eine "wsgi.conf", allerdings keine "wsgi.load" (normal?). Beim Versuch, über a2enmod das Modul zu aktivieren, kommt nur ein:

ERROR: Module wsgi does not exist!

Was habe ich denn jetzt falsch gemacht?

Insgesamt, wenn ich es richtig verstehe, sage ich dann (sobal das Modul mal läuft) dem Apachen, dass er mein Hauptskript ausführen soll, und dieses ist dann praktisch immer Aktiv und wartet auf einen Aufruf über den Webbrowser, dem dann mit einer HTML-Seite geantwortet wird, oder? Also anstatt das das Skript immer erst ausgeführt wird, sobald man die Seite aufruft (wie bei zB PHP), wartet das Skript mit Hilfe von WSGI immer auf eingehende Verbindungen?

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Hallo,

Kaktus621 schrieb:

Nun versuche ich das WSGI Modul zu installieren, allerdings habe ich da auch ein wenig probleme. Installieren tue ich mit einem:

apt-get install libapache2-mod-wsgi

Soweit, so gut. Im mods-available Ordner des Apachen erscheint auch eine "wsgi.conf", allerdings keine "wsgi.load" (normal?). Beim Versuch, über a2enmod das Modul zu aktivieren, kommt nur ein:

ERROR: Module wsgi does not exist!

Was habe ich denn jetzt falsch gemacht?

hast du evtl. aus Versehen die Datei gelöscht? Hilft es das Paket nochmal vollständig zu entfernen und neu zu installieren?

Gruß

Kaktus621

(Themenstarter)

Anmeldungsdatum:
22. Mai 2005

Beiträge: 39

Ah, eine Neuinstallation hat tatsächlich geholfen. Wundert micht nur, da ich mit dem "rm" Befehl sehr sparsam umgegangen bin (aus dem mods-* Ordner habe ich definitiv nichts gelöscht).

Naja, wie auch immer, nach editieren der default-site wird das Skript nun ausgeführt und ich erhalte ein "Hello World!" ☺ Danke für die Hilfe!

Kaktus621

(Themenstarter)

Anmeldungsdatum:
22. Mai 2005

Beiträge: 39

Neues Problem: Das WSGI-Modul funktioniert zwar, ist aber wohl recht eingeschränkt. Was ich machen möchte, ist einen TCP-Server, der auf Port 621 lauschen soll. Wenn ich alles richtig verstanden habe, müsste der Code dann so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

from wsgiref.simple_server import make_server
srv = make_server('localhost', 621, application)
srv.serve_forever()

Dieses Skript funktioniert allerdings nicht, wegen eines 'Permission Denied'-Fehlers. Hier ein Auszug aus der Error.log vom Apachen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2] mod_wsgi (pid=5612): Target WSGI script '/var/www/python/test.wsgi' cannot be loaded as Python module.
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2] mod_wsgi (pid=5612): Exception occurred processing WSGI script '/var/www/python/test.wsgi'.
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2] Traceback (most recent call last):
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/var/www/python/test.wsgi", line 12, in <module>
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     srv = make_server('localhost', 621, application)
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/usr/lib/python2.6/wsgiref/simple_server.py", line 181, in make_server
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     server = server_class((host, port), handler_class)
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/usr/lib/python2.6/SocketServer.py", line 400, in __init__
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     self.server_bind()
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/usr/lib/python2.6/wsgiref/simple_server.py", line 50, in server_bind
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     HTTPServer.server_bind(self)
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/usr/lib/python2.6/BaseHTTPServer.py", line 108, in server_bind
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     SocketServer.TCPServer.server_bind(self)
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "/usr/lib/python2.6/SocketServer.py", line 411, in server_bind
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]     self.socket.bind(self.server_address)
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2]   File "<string>", line 1, in bind
[Thu Dec 24 19:38:19 2009] [error] [client 192.168.178.2] error: [Errno 13] Permission denied

Wie kann ich dem Modul das Recht geben, einen Server zu öffnen?

EDIT: Hat sich erledigt, nach einer weiteren Ewigkeit des Suchens im Internet habe ich herausgefunden, dass solch ein Server quasi "standalone" Betrieben werden muss, also unabhängig vom Apachen. Ein "sudo python datei.wsgi" funktioniert und der Server lauscht auf Port 621. Wobei man dann im obigen Code anstatt 'localhost' einfach nur eintragen muss, damit auch Verbindungen von Außen akzeptiert werden.

Antworten |