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
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.
|