2012-02-06 40 views
6

Im đang cố gắng thiết lập dự án django của tôi trên máy chủ dàn dựng với nginx, virtualenv và uwsgi, nhưng tôi vẫn nhận được lỗi nhập mô-đun wsgi.Django, Virtualenv, nginx + uwsgi mô-đun nhập khẩu lỗi wsgi

Nếu có cộng đồng mà tôi có thể tìm thấy câu trả lời ở đây ... Xin cảm ơn tất cả trước.

Đây là file cấu hình của tôi:

uwsgi.py về dự án django tôi:

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 Cấu hình

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

và uwsgi.conf tôi

# 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 gs không nêu bất cứ điều gì ngoài một 500 trong access.log, vì vậy heres 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) 

Tôi không biết nếu cách tôi lập dự án của tôi có bất cứ điều gì để làm với nó, nhưng dù sao heres các quản lý tập tin mà tôi sử dụng để chuyển hướng các tiện ích django:

manage.sh

#!/bin/bash 

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

và chỉ trong trường hợp này là làm thế nào tôi đã thiết lập một dự án 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 

Trả lời

5

tôi cập nhật wsgi.py trông như thế này:

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

tập tin uwsgi.conf của tôi bây giờ trông như thế này:

# 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 

Và nginx tập tin trang web có sẵn của tôi trông như thế này:

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

Và nó hoạt động hoàn hảo hiện nay, tôi đã có một số vấn đề với phong cách vì các ký tự lạ được sử dụng như - trong các tệp css.

Bây giờ tôi muốn biết tôi nên làm gì khi tôi cần chạy nhiều dự án trong cùng một máy chủ với uwsgi?

+1

Điều tôi làm cho nhiều dự án là sử dụng gói Debian uwsgi. Nó đi kèm với init script, một số tệp cài đặt .ini mặc định và quản lý từng dự án. Bạn chỉ cần cấu hình cho mỗi tệp và một ổ cắm khác nhau cho mỗi tệp (được xử lý theo mặc định) và tất cả chúng sẽ chạy độc đáo trên cùng một hệ thống.Ngay cả khi bạn không sử dụng Debian, bạn vẫn có thể sử dụng tập lệnh init và bố cục cấu hình từ gói Debian: http://ftp.de.debian.org/debian/pool/main/u/uwsgi/uwsgi_1.2.3 + dfsg.orig.tar.gz – freb

1

hãy chắc chắn để thêm thư mục chứa các tập tin wsgi.py đến PYTHONPATH (bạn có thể chỉ định một loạt không giới hạn các chỉ thị PYTHONPATH)

+0

--pythonpath/home/ubuntu/django-projects/project/project/configs/dàn dựng/<- Đã được kiểm tra, đó là nơi tôi giữ tệp wsgi.py. Hay bạn ám chỉ điều gì khác? Cảm ơn! – maumercado

+0

không nên là/home/ubuntu/django-projects/project/project_apps/configs/dàn dựng thay vì/home/ubuntu/django-projects/project/project/configs/dàn dựng? – roberto

+0

Ồ, tôi hiểu rồi ... vâng thực sự nó là như vậy, việc thiết lập tôi đặt ở đó thư mục "project_apps" thực sự được gọi là project, Ill chỉnh sửa điều đó! – maumercado

Các vấn đề liên quan