3 votes

problème avec nginx + uwsgi en mode vhost, pour une application django

J'ai quelques applications django sur mes serveurs, qui fonctionnent parfaitement sur leur propre fichier socket, mais j'ai l'intention d'introduire d'autres applications django, donc je préfère exécuter uwsgi en mode vhost, mais il semble y avoir un problème avec l'importation/les chemins d'accès.

Voici la configuration du virtualhost de nginx

location / {

    include uwsgi_params;

    uwsgi_param UWSGI_PYHOME /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_PYHOME /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_PYTHONPATH /home/httpd/django.udm.local/public_html;
    uwsgi_param UWSGI_CHDIR /home/httpd/django.udm.local/public_html
    uwsgi_param UWSGI_ENV DJANGO_SETTINGS_MODULE=settings;
    uwsgi_param UWSGI_MODULE mysite;

    uwsgi_pass  127.0.0.1:1088;

et dans le fichier "mysite.py" j'ai ceci :

import os, sys

sys.path.append(os.path.dirname(__file__))

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

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

J'exécute uwsgi avec cette commande :

uwsgi -s 127.0.0.1:1088 -M --no-site --vhost 

et voici l'erreur

*** Operational MODE: single process ***
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1838)
spawned uWSGI worker 1 (pid: 1839, cores: 1)
Traceback (most recent call last):
  File "./mysite.py", line 7, in <module>
    import django.core.handlers.wsgi
ImportError: No module named django.core.handlers.wsgi
unable to load app SCRIPT_NAME=django.udm.local|

comme vous pouvez l'imaginer, django est correctement installé sur le système

# python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django.core.handlers.wsgi
>>> 

Merci !

UPDATE 18/8 enfin j'ai trouvé la solution j'ai changé le fichier mysite.py et ajouté les chemins vers django et les librairies python

import os, sys

sys.path.append(os.path.dirname(__file__))
sys.path.append('/usr/lib/pymodules/python2.6')
sys.path.append('/usr/lib/python2.6/dist-packages')

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

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

1voto

roberto Points 11

UWSGI_PYHOME définit un virtualenv, donc si vous n'êtes pas sous un virtualenv vous devez le supprimer. Vous pouvez être intéressé par cette configuration : http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

0voto

Wesley Points 701

Je ne pense pas que ce soit bien d'ajouter des choses dans le fichier wsgi. C'est en fait codé en dur si on fait ça.

Que se passe-t-il si vous déployez du code sur différents systèmes ou même différentes versions de Python ? Peut-être python2.6, python2.7, etc., et que vous devez ajouter le bon sys.path au serveur déployé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X