3

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()
reiven
  • 71
  • 1
  • 5

2 Answers2

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

roberto
  • 11
  • 1
  • No, same error here : added /home/httpd/ to pythonpath. Traceback (most recent call last): File "./mysite.py", line 14, in import django.core.handlers.wsgi ImportError: No module named django.core.handlers.wsgi – reiven Aug 18 '11 at 15:11
  • as you can see, i've added the solution i've found for that. thanks! – reiven Aug 18 '11 at 19:56
0

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.

Wesley
  • 1,857
  • 2
  • 16
  • 30
  • This question is not outdated, because this happends on django v1.3 which is unmantained now, and new django versions came with their own wsgi file which "just works" for using it into a virtualenv – reiven Sep 03 '15 at 14:13