2012-02-06 27 views
6

Nginx, virtualenv ve uwsgi ile bir hazırlama sunucusunda django projemi kurmaya çalışıyorum, ancak bir içe aktarma modülü wsgi hatası alıyorum.Django, Virtualenv, nginx + uwsgi içe aktarma modülü wsgi hatası

Burada bir topluluk varsa, bir cevap burada bulabilir ... Önceden teşekkür ederiz. Benim django proje üzerinde

uwsgi.py:

Bu benim yapılandırma dosyalarıdır

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() 

Nginx Yapılandırma

# 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; 
    } 
} 

ve benim 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 

Nginx lo neyse heres

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) 

projemi kurmak yolu onunla ilgisi olup olmadığını bilmiyorum, ama: gs access.log bir 500 dışında bir şey ifade, çok heres uwsgi.log gelmez

manage.sh

#!/bin/bash 

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

ve her ihtimale karşı bu bir django projesini kurdunuz nasıl:

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 
django yardımcı programlarını yönlendirmek için kullanın dosyayı yönetme

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() 

: 0

cevap

5

(eğer PYTHONPATH direktifleri sınırsız dizi belirtebilirsiniz) benim uwsgi.conf dosyası artık şuna benzer:

# 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 

Ve nginx site kullanılabilir dosya şuna benzer:

# 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; 
     } 
} 

Ve şimdi mükemmel çalışıyor, css dosyalarında ñ gibi kullanılan garip karakterler nedeniyle stillerinde bazı sorunlar yaşadım.

Şimdi uwsgi ile aynı sunucuda daha fazla proje çalıştırmam gerektiğinde ne yapmam gerektiğini bilmek ister misiniz?

+1

Birden çok proje için yaptığım şey, uwsgi Debian paketini kullanmaktır. Init betikleri, bazı varsayılan .ini ayarları dosyaları ile birlikte gelir ve her bir projeyi yönetir. Her dosya için bir konfigürasyona ve her biri için farklı bir sokete (varsayılan olarak işlenir) ihtiyacınız vardır ve hepsi aynı sistemde iyi çalışırlar.Debian'da olmasanız bile, init komut dosyalarını ve yapılandırma düzenini Debian paketinden hala kullanabilirsiniz: http://ftp.de.debian.org/debian/pool/main/u/uwsgi/uwsgi_1.2.3 + dfsg.orig.tar.gz – freb

1

PYTHONPATH için wsgi.py dosyasını içeren dizini eklemeyi unutmayın Böyle görünmek wsgi.py güncellenmiş

+0

--pythonpath/home/ubuntu/django-projects/project/project/configs/aşamalandırma/<- Zaten kontrol ettim, wsgi.py dosyasını saklıyorum. Yoksa başka bir şey mi demek istiyorsun? Teşekkürler! – maumercado

+0

/home/ubuntu/django-projects/project/project_apps/configs/staging/home/ubuntu/django-projects/project/project/configs/staging yerine değil mi? – roberto

+0

Oh anladım ... evet aslında bu şekilde, "project_apps" klasörünü yerleştirdiğim kurulum, aslında proje olarak adlandırılıyor, bunu düzelteceğim! – maumercado

İlgili konular