Seite 1 von 1
Bottle und mod_wsgi
Verfasst: Montag 5. Juli 2010, 15:24
von xm22
Hi,
ich stelle mich bestimmt gerade sehr dämlich an, aber ich kriege es echt nicht hin, bottle mit mod_wsgi zum laufen zu bringen. Hier erst mal, was gegeben ist:
VirtualHost:
Code: Alles auswählen
<VirtualHost *:80>
ServerName debian.local
DocumentRoot /var/www/python/
WSGIDaemonProcess bottle_test user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/python/bottle_test/app.wsgi
<Directory /var/www/python/bottle_test>
WSGIProcessGroup bottle_test
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Ordner:
Code: Alles auswählen
/var/www/python
/var/www/python/bottle_test
/var/www/python/bottle_test/app.wsgi
/var/www/python/bottle_test/bottle.py
Apache-Error-Log:
Code: Alles auswählen
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] mod_wsgi (pid=11188): Target WSGI script '/var/www/python/bottle_test/app.wsgi' cannot be loaded as Py$
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] mod_wsgi (pid=11188): Exception occurred processing WSGI script '/var/www/python/bottle_test/app.wsgi'.
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] Traceback (most recent call last):
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] File "/var/www/python/bottle_test/app.wsgi", line 1, in <module>
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] from bottle import route, run
[Mon Jul 05 16:27:36 2010] [error] [client 10.0.60.68] ImportError: No module named bottle
So, wie ich das jetzt verstanden habe, müsste die bottle.py autmatisch gefunden werden oder fehlt mir da noch etwas?
Re: Bottle und mod_wsgi
Verfasst: Montag 5. Juli 2010, 15:51
von tordmor
xm22 hat geschrieben:
So, wie ich das jetzt verstanden habe, müsste die bottle.py autmatisch gefunden werden oder fehlt mir da noch etwas?
mod_wsgi wechselt das Verzeichnis nicht, d.h. /var/www/python/bottle_test ist nicht das aktuelle Verzeichnis und damit auch nicht im Pythonpath. Benutze also die WSGIPythonPath direktive um es hinzuzufügen.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 10:57
von xm22
Stelle ich mich zu dämlich an?
Jetzt sieht die Konfiguration so aus:
Code: Alles auswählen
WSGIPythonPath /var/www/pythin/bottle_test/
<VirtualHost *:80>
ServerName debian.local
DocumentRoot /var/www/python/
WSGIDaemonProcess bottle_test user=www-data group=www-data processes=1 threads=5
WSGIScriptAlias / /var/www/python/bottle_test/app.wsgi
<Directory /var/www/python/bottle_test>
WSGIProcessGroup bottle_test
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Aber das selbe Problem: Er findet bottle nicht..
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 11:46
von noisefloor
Hallo,
wo ist denn die Bottle-Datei?
Und poste mal den app.wsgi.
Gruß, noisefloor
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 12:03
von Defnull
xm22 hat geschrieben:
Aber das selbe Problem: Er findet bottle nicht..
Du hast einen Tippfehler im Pfad. Außerdem hat das Beispiel in der Bottle Dokumentation folgende Zeilen VOR dem bottle-import:
Code: Alles auswählen
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))
Damit sollte es auch ohne WSGIPythonPath gehen.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 13:28
von mitsuhiko
Defnull hat geschrieben:Du hast einen Tippfehler im Pfad. Außerdem hat das Beispiel in der Bottle Dokumentation folgende Zeilen VOR dem bottle-import:
Code: Alles auswählen
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))
Das klingt nach einer sehr schlechten Idee. Im embedded mode gibt es nur ein working directory fuer allen Code im Server und geht damit leicht kaputt. Ansonsten hast du immer noch das Problem, dass dir irgendwas den Pfad aendern kann. Warum braucht bottle ein gesetztes Working Directory?
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 13:44
von xm22
Selbst mit dem os-Befehl ändert sich nichts.
Meine app.wsgi:
Code: Alles auswählen
from bottle import route, run
@route('/')
def index():
return 'Hello World!'
Die Bottle-Datei ist im selben Verzeichnis wie die app.wsgi.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 14:44
von noisefloor
Hallo,
Meine app.wsgi:
Äh... Da fehlt auch was, damit es im Apache unter mod_wsgi läuft...
Schau noch mal in die Doku.
Gruß, noisefloor
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 14:47
von noisefloor
Hallo,
@misuhiko: Bei mir ist es so, dass Bottle die Templates sonst nicht findet. Das Skript an sich läuft, AFAIK... müsste ich aber nochmal testen.
Gruß, noisefloor
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 14:58
von Dav1d
noisefloor meint hier:
http://bottle.paws.de/docs/0.8/tutorial ... e-mod-wsgi
@mitsuhiko, ich habe bottle installiert, also im site-packages Ordner => ich brauche
nicht, nur wenn ich templates verwenden will, da sie sonst wie bei noisefloor nicht gefunden werden.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 15:21
von Defnull
mitsuhiko hat geschrieben:Warum braucht bottle ein gesetztes Working Directory?
Um die Templates zu finden. Wenn es nur um templates geht, kann man das auch mit
lösen, aber das Problem des OP ist ja eher, das bottle.py nicht in sys.path zu finden ist.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 15:31
von xm22
Vielleicht habe ich ja Tomaten auf den Augen.. Meine app.wsgi jetzt (Mal trotz des hin und her mit dem os

):
Code: Alles auswählen
import os
# Change working directory so relative paths (and template lookup) work again
os.chdir(os.path.dirname(__file__))
import bottle
# ... add or import your bottle app code here ...
# Do NOT use bottle.run() with mod_wsgi
application = bottle.default_app()
os musste ich importieren, da es sonst nicht gefunden wurde. Die Path-Direktive habe ich wieder aus der Apache-Config entfernt.
Re: Bottle und mod_wsgi
Verfasst: Dienstag 6. Juli 2010, 22:09
von ms4py
Zum Thema Working Dir ändern, würde ich auch nicht machen. Sobald man mehrere WSGI-Container hat, läuft das Ganze nicht mehr wie gewünscht.
Meine Lösung:
Code: Alles auswählen
APP_ROOT = os.path.abspath(os.path.dirname(__file__))
bottle.TEMPLATE_PATH.append(os.path.join(APP_ROOT, 'views'))
Analog kannst du auch bei deinem Problem vorgehen, ich würde das so lösen (statt dem Teil mit `os.chdir`):
Code: Alles auswählen
import os
import sys
APP_ROOT = os.path.abspath(os.path.dirname(__file__))
sys.path.insert(0, APP_ROOT)
Re: Bottle und mod_wsgi
Verfasst: Mittwoch 7. Juli 2010, 07:04
von noisefloor
Hallo,
@ms4py: Was meinst du mit "mehrere Container" - mehrere WSGI-Apps in verschiedenen Verzeichnissen auf einem Apache?
Das funktioniert bei mir ohne Probleme (bei drei Apps in drei Verzeichnissen und 3x mal dem "falschen" adapter.wsgi, wie oben beschrieben).
Gruß, noisefloor
Re: Bottle und mod_wsgi
Verfasst: Mittwoch 7. Juli 2010, 09:38
von xm22
@ms4py: Danke, das hat funktioniert. Jetzt muss ich nur noch mit dem Framework klar kommen
Allen anderen auch vielen Dank für die Mühe!
Re: Bottle und mod_wsgi
Verfasst: Mittwoch 7. Juli 2010, 16:54
von ms4py
noisefloor hat geschrieben:Das funktioniert bei mir ohne Probleme (bei drei Apps in drei Verzeichnissen und 3x mal dem "falschen" adapter.wsgi, wie oben beschrieben).
Aber nicht mit einem relativen Template-Pfad...
(Kommt vielleicht auch auf die spezifische Server-Config an, bei pyrox war es auf jeden Fall ein Problem)