Django, WSGI: ImportError bei settings

Django, Flask, Bottle, WSGI, CGI…
Antworten
davidmm
User
Beiträge: 9
Registriert: Dienstag 13. Oktober 2009, 15:52

Hallo Forum,

ich versuche gerade mein Django-Projekt auf einem Apache Server laufen zu lassen. Es soll mit WSGI eingebunden werden. Ich habe einen VirtualHost in Apache2 angelegt.

listen 8000
NameVirtualHost *:8000
<VirtualHost *:8000>
WSGIScriptAlias / /var/www/vonmoenus/django.wsgi
</VirtualHost>
Hier das django.wsgi script (Pfad zum debuggen in den Error log ausgegeben):

Code: Alles auswählen

import os
import sys

sys.path.append('/var/www/vonmoenus')
sys.path.append('/var/www/vonmoenus/web')
print >> sys.stderr, sys.path

os.environ['DJANGO_SETTINGS_MODULE'] = 'web.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Das Arbeitsverzeichnis ist komplett an Apache überschrieben:
-rw-r--r-- 1 www-data www-data 286 May 2 15:56 django.wsgi
drw-r--r-- 14 www-data www-data 4096 May 2 15:19 web
-rw-r--r-- 1 www-data www-data 106496 May 2 14:44 web.db
Wenn ich jetzt die Webseite aufrufe bekomme ich eine 500er Antwort und finde folgendes im Apache Errorlog:
[Sun May 02 16:02:56 2010] [error] ['/usr/lib/python2.5/site-packages/django_treemenus-0.8.5-py2.5.egg', '/usr/lib/python2.5/site-packages/django_rosetta-0.5.3-py2.5.egg', '/usr/lib/python2.5/site-packages', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/PIL', '/var/www/vonmoenus', '/var/www/vonmoenus/web']
[Sun May 02 16:02:56 2010] [error] [client meineip] mod_wsgi (pid=31767): Exception occurred within WSGI script '/var/www/vonmoenus/django.wsgi'.
[Sun May 02 16:02:56 2010] [error] [client meineip] Traceback (most recent call last):
[Sun May 02 16:02:56 2010] [error] [client meineip] File "/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 230, in __call__
[Sun May 02 16:02:56 2010] [error] [client meineip] self.load_middleware()
[Sun May 02 16:02:56 2010] [error] [client meineip] File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 33, in load_middleware
[Sun May 02 16:02:56 2010] [error] [client meineip] for middleware_path in settings.MIDDLEWARE_CLASSES:
[Sun May 02 16:02:56 2010] [error] [client meineip] File "/usr/lib/python2.5/site-packages/django/utils/functional.py", line 269, in __getattr__
[Sun May 02 16:02:56 2010] [error] [client meineip] self._setup()
[Sun May 02 16:02:56 2010] [error] [client meineip] File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 40, in _setup
[Sun May 02 16:02:56 2010] [error] [client meineip] self._wrapped = Settings(settings_module)
[Sun May 02 16:02:56 2010] [error] [client meineip] File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 75, in __init__
[Sun May 02 16:02:56 2010] [error] [client meineip] raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
[Sun May 02 16:02:56 2010] [error] [client meineip] ImportError: Could not import settings 'web.settings' (Is it on sys.path? Does it have syntax errors?): No module named web.settings
Das settings Modul sollte im Pfad vorhanden sein und mittels "manage.py runserver" läuft die Seite bei mir lokal problemlos.

Gibts noch irgendetwas was ich nicht beachtet habe?

Danke!
davidmm
User
Beiträge: 9
Registriert: Dienstag 13. Oktober 2009, 15:52

Es hat sich herausgestellt, dass es sich um ein Rechteproblem handelt. Mit 777 auf allen Dateien funktioniert alles. Allerdings ist mir dabei nicht wirklich wohl.
BlackJack

@davidmm: Hast Du mal geschaut unter welchem Benutzer das läuft? Das muss AFAIK nicht der sein, unter dem der Webserver läuft.
davidmm
User
Beiträge: 9
Registriert: Dienstag 13. Oktober 2009, 15:52

So wie ich das verstanden habe kann man einen anderen User einsetzen, wenn man einen Daemon Prozess configuriert. Das habe ich nicht gemacht. Ich finde leider in der Doku gerade keinen Hinweis unter welchem Nutzer WSGI arbeitet. :/

Edit: Habe nun www-data manuell als Nutzer configuriert. Jetzt schauts schon besser aus.
BlackJack

@davidmm: Mit nachschauen meinte ich nicht die Dokumentation sondern im laufenden Programm nachsehen was `getuid()`, `geteuid()`, `getgid()`, und `getegid()` aus dem `os`-Modul sagen.

Aber wenn explizites Setzen des Benutzers in der Konfiguration auch geht…
Antworten