Django, Virtualenv, nginx + uwsgi import módulo wsgi error

Estoy intentando configurar mi proyecto django en un servidor de pruebas con nginx, virtualenv y uwsgi, pero sigo recibiendo un error wsgi del módulo de importación.

Si hay una comunidad, puedo encontrar una respuesta aquí … Gracias de antemano.

Estos son mis archivos de configuración:

uwsgi.py en mi proyecto django:

import os import sys import site site.addsitedir(os.path.join(os.environ['WORKON_HOME'],'project/lib/python2.6/site-packages')) sys.path.append(os.path.abspath(os.path.dirname(__file__))) sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../../../')) sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../../')) os.environ['DJANGO_SETTINGS_MODULE'] = 'project.configs.staging.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

Configuración de Nginx

 # nginx configuration for project.maumercado.com server { server_name project.maumercado.com; access_log /home/ubuntu/logs/project/nginx/access.log; error_log /home/ubuntu/logs/project/nginx/error.log; location / { uwsgi_pass unix:/tmp/uwsgi.sock; include /etc/nginx/uwsgi_params; } location /static { root /home/ubuntu/django-projects/project/project/media; } location /media { root /home/ubuntu/django-projects/project/project/media; } } 

y, mi uwsgi.conf

 # file: /etc/init/uwsgi.conf description "uWSGI starter" start on (local-filesystems and runlevel [2345]) stop on runlevel [016] respawn # home - is the path to our virtualenv directory # pythonpath - the path to our django application # module - the wsgi handler python script exec /home/ubuntu/ve/project/bin/uwsgi \ --uid www-data \ --pythonpath /home/ubuntu/django-projects/project/project/configs/staging/ \ --socket /tmp/uwsgi.sock \ --chmod-socket \ --module wsgi \ --logdate \ --optimize 2 \ --processes 2 \ --master \ --logto /home/ubuntu/logs/project/uwsgi.log 

Los registros de Nginx no indican nada más que un 500 en access.log, así que aquí está el uwsgi.log:

 Mon Feb 6 13:58:23 2012 - *** Starting uWSGI 1.0.2.1 (32bit) on [Mon Feb 6 13:58:23 2012] *** Mon Feb 6 13:58:23 2012 - compiled with version: 4.4.5 on 06 February 2012 12:32:36 Mon Feb 6 13:58:23 2012 - current working directory: / Mon Feb 6 13:58:23 2012 - detected binary path: /home/ubuntu/ve/project/bin/uwsgi Mon Feb 6 13:58:23 2012 - setuid() to 1000 Mon Feb 6 13:58:23 2012 - your memory page size is 4096 bytes Mon Feb 6 13:58:23 2012 - chmod() socket to 666 for lazy and brave users Mon Feb 6 13:58:23 2012 - uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 3 Mon Feb 6 13:58:23 2012 - Python version: 2.6.6 (r266:84292, Sep 15 2010, 16:02:57) [GCC 4.4.5] Mon Feb 6 13:58:23 2012 - Set PythonHome to /home/ubuntu/ve/project Mon Feb 6 13:58:23 2012 - Python main interpreter initialized at 0x9a9d740 Mon Feb 6 13:58:23 2012 - your server socket listen backlog is limited to 100 connections Mon Feb 6 13:58:23 2012 - *** Operational MODE: preforking *** Mon Feb 6 13:58:23 2012 - added /home/ubuntu/django-projects/project/ to pythonpath. ImportError: No module named wsgi Mon Feb 6 13:58:23 2012 - unable to load app 0 (mountpoint='') (callable not found or import error) Mon Feb 6 13:58:23 2012 - *** no app loaded. going in full dynamic mode *** Mon Feb 6 13:58:23 2012 - *** uWSGI is running in multiple interpreter mode *** Mon Feb 6 13:58:23 2012 - spawned uWSGI master process (pid: 551) Mon Feb 6 13:58:23 2012 - spawned uWSGI worker 1 (pid: 588, cores: 1) Mon Feb 6 13:58:23 2012 - spawned uWSGI worker 2 (pid: 589, cores: 1) 

No sé si la forma en que configuro mi proyecto tiene algo que ver con eso, pero de todos modos aquí está el archivo de administración que utilizo para redirigir las utilidades de django:

manage.sh

 #!/bin/bash python ./project/configs/${DEPLOYMENT_TARGET:="common"}/manage.py $* 

y por si acaso así es como he configurado un proyecto de django:

 project |-manage.sh -> this fellow is redirected to settings.py (production, common or staging) |-requirements.txt |-README |-dashbard.py |-project.sqlite |- project/ |- apps |- accounts |-other internal apps |- configs |- common -> for local development |-settings.py |-manage.py |-urls |-staging |-manage.py |-settings.py |-wsgi.py |-logging.conf |-production |-manage.py |-settings.py |-wsgi.py |-logging.conf |-media |-templates 

Actualicé wsgi.py para tener este aspecto:

 import os import sys import site site.addsitedir(os.path.join('/home/ubuntu/ve','project/lib/python2.6/site-packages')) sys.path.append(os.path.abspath(os.path.dirname(__file__))) sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../../../')) sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), '../../')) os.environ['DJANGO_SETTINGS_MODULE'] = 'project.configs.staging.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

Mi archivo uwsgi.conf ahora se ve así:

 # file: /etc/init/uwsgi.conf description "uWSGI starter" start on (local-filesystems and runlevel [2345]) stop on runlevel [016] respawn # home - is the path to our virtualenv directory # pythonpath - the path to our django application # module - the wsgi handler python script exec /home/ubuntu/ve/project/bin/uwsgi \ --uid ubuntu \ --pythonpath /home/ubuntu/django-projects/project/project/configs/staging \ -H /home/ubuntu/ve/project \ --socket /tmp/uwsgi.sock \ --chmod-socket 644 \ --module wsgi \ --logdate \ --optimize 2 \ --processes 2 \ --master \ --logto /home/ubuntu/logs/project/uwsgi.log 

Y mi archivo nginx disponible para el sitio se ve así:

 # file: /etc/nginx/sites-available/yourdomain.com # nginx configuration for project.maumercado.com server { listen 80; charset utf-8; server_name project.maumercado.com; access_log /home/ubuntu/logs/project/nginx/access.log; error_log /home/ubuntu/logs/project/nginx/error.log; location ^~ /cache/ { root /home/ubuntu/django-projects/project/project/media; expires max; } location / { uwsgi_pass unix:/tmp/uwsgi.sock; include /etc/nginx/uwsgi_params; } } 

Y ahora está funcionando perfectamente, tuve algunos problemas con los estilos debido a que se utilizan caracteres extraños como ñ en los archivos css.

Ahora me gustaría saber qué debo hacer cuando necesito ejecutar más proyectos en el mismo servidor con uwsgi.

asegúrese de agregar el directorio que contiene el archivo wsgi.py a pythonpath (puede especificar una serie ilimitada de directivas de pythonpath)