问题
I have a couple of django apps on my servers, running perfectly on their own socket file, but i plan to introduce some more django apps, so i prefer to run uwsgi in vhost mode, but it seems to have some problem with the import/paths
Here is the nginx virtualhost configuracion
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;
and in the "mysite.py" file i have this:
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()
i'm running uwsgi with this command:
uwsgi -s 127.0.0.1:1088 -M --no-site --vhost
and HERE is the error
*** 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|
as you can imagine, django is correctly installed on the system
# 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
>>>
thanks!
UPDATE 18/8 finally i've found the solution.. i've changed the mysite.py file and added the paths to django and the python libs
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()
回答1:
UWSGI_PYHOME will set a virtualenv, so if you are not under a virtualenv you have to remove it. You may be interested in this config: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks
回答2:
I don't think it's right to added things in wsgi file. It's actually hard coded if doing that.
What happened if you deploy code to different systems or even different versions of Python? maybe python2.6, python2.7 .etc, so have to append correct sys.path upon deployed server.
来源:https://stackoverflow.com/questions/7081462/problem-with-nginx-uwsgi-in-vhost-mode-running-django-app