Django avec apache et wsgi lève ImportError

J’essaie de déployer mon application Django sur un serveur Apache sans succès. J’ai réussi avec l’exemple d’application WSGI et j’ai essayé d’héberger un projet Django vide. Bien qu’il fonctionne correctement avec le serveur d’exit manage.py, il génère l’erreur suivante lors de l’utilisation d’apache:

[notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u9 mod_python/3.3.1 Python/2.7.3 mod_wsgi/2.7 configured -- resuming normal operations [error] [client xxxx] mod_wsgi (pid=8300): Exception occurred processing WSGI script '/usr/local/www/django/myapp/wsgi.py'. [error] [client xxxx] Traceback (most recent call last): [error] [client xxxx] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 187, in __call__ [error] [client xxxx] self.load_middleware() [error] [client xxxx] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 44, in load_middleware [error] [client xxxx] for middleware_path in settings.MIDDLEWARE_CLASSES: [error] [client xxxx] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 54, in __getattr__ [error] [client xxxx] self._setup(name) [error] [client xxxx] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 49, in _setup [error] [client xxxx] self._wrapped = Settings(settings_module) [error] [client xxxx] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 132, in __init__ [error] [client xxxx] % (self.SETTINGS_MODULE, e) [error] [client xxxx] ImportError: Could not import settings 'myapp.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named myapp.settings 

Mon wsgi.py est le suivant:

 """ WSGI config for myapp project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ """ import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 

J’ai un fichier wsgi.conf dans la bibliothèque conf.d pour apache:

  ServerName myapp.example.com ServerAlias myapp ServerAdmin [email protected] DocumentRoot /var/www  Order allow,deny Allow from all  WSGIDaemonProcess myapp processes=2 threads=15 display-name=%{GROUP} WSGIProcessGroup myapp WSGIScriptAlias /myapp /usr/local/www/django/myapp/wsgi.py LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so  WSGIPythonPath /usr/local/www/django/myapp 

[RESOLU] Merci, j’ai tout recommencé, apporté les modifications suggérées à mes fichiers de configuration, et maintenant ça marche. Je ne pouvais pas marquer les deux suggestions correctement, mais je pense que les deux étaient nécessaires et j’ai eu un troisième (quasortingème, cinquième …) bogue, qui a disparu après la réinstallation.

Il semble que vous ayez utilisé un ancien guide pour configurer apache2 / wsgi. Je recommande d’utiliser le guide officiel à l’ adresse https://code.google.com/p/modwsgi/wiki/InstallationInstructions

Quoi qu’il en soit, votre problème spécifique est que l’application wsgi ne détecte pas correctement le chemin Python. Changez-vous VirtualHost conf en quelque chose comme ça

  ServerName myapp.example.com ServerAlias myapp ServerAdmin [email protected] DocumentRoot /usr/local/www/django/myapp WSGIDaemonProcess myapp processes=2 threads=15 display-name=%{GROUP} python-path=/usr/local/www/django/myapp:/path/to/system/python/site-packages WSGIProcessGroup myapp WSGIScriptAlias / /usr/local/www/django/myapp/wsgi.py   Order allow,deny Allow from all    

Votre fichier de parameters se trouve dans /usr/local/www/django/myapp/settings.py, mais vous définissez PythonPath sur / usr / local / www / django / myapp, puis définissez DJANGO_SETTINGS_MODULE sur “myapp.settings” – ne conviendrait que si les parameters étaient dans myapp / myapp / settings. Déposez une de ces références à “myapp”.