2011-11-26 54 views
0

一直有一个Apache/mod_wsgi的堆栈持续存在的问题,最后决定把我的损失,并开始对事物迁移到nginx的/ uWSGI/Django的设置,没有发现

服务器端鲜有得到的Nginx设置代理请求到uwsgi。使用uwsgi协议相当容易。

不过uwsgi已经平原固执,试图读取文档/教程/要求在IRC ...... 请让Django的WSGI模块的同样的错误,没有找到设置, 但是当我通过一个控制台我运行相同的代码不要有任何错误。

粘贴下面的所有相关脚本 - 假设我错过了一些明显的东西,但我不知道是什么。

在Ubuntu上运行11.10瓦特/新贵脚本启动

新贵脚本

description "uWSGI starter" 
start on (local-filesystems 
and runlevel [2345]) 
stop on runlevel [016] 
respawn 
exec /usr/local/sbin/uwsgi \ 
--uid www-data \ 
--socket 127.0.0.1:5050 \ 
--master \ 
--logto /var/log/uwsgi_main.log \ 
--logdate \ 
--optimize 2 \ 
--processes 4 \ 
--harakiri 120 \ 
--vhost \ 
--no-site 

nginx的服务器配置

server { 
    listen 80; 
    server_name .DOMAIN.com; 
    access_log /home/USER/virtualenv/logs/nginx/access.log; 
    error_log /home/USER/virtualenv/logs/nginx/error.log; 
    client_max_body_size 10m; 
    keepalive_timeout 120; 

    location /media/ { 
     root /home/USER/virtualenv/PROJECT; 
    } 
    location /static/ { 
     root /home/USER/virtualenv/PROJECT; 
    } 

    location/{ 
     uwsgi_pass uwsgi_main; 
     include uwsgi_params; 
     uwsgi_param UWSGI_PYHOME /home/USER/virtualenv; 
     uwsgi_param UWSGI_SCRIPT deploy.deploy; 
     uwsgi_param UWSGI_CHDIR /home/USER/virtualenv/PROJECT; 
     root /home/USER/virtualenv; 
    } 
} 

deploy.py

import os, site, sys 

prev_sys_path = list(sys.path) 
site.addsitedir('/home/USER/virtualenv/lib/python2.7/site-packages') 

sys.path.append('/home/USER/virtualenv/PROJECT') 
sys.path.append('/home/USER/virtualenv/') 

new_sys_path = [p for p in sys.path if p not in prev_sys_path] 
for item in new_sys_path: 
    sys.path.remove(item) 
sys.path[:0] = new_sys_path 

os.environ['DJANGO_SETTINGS_MODULE'] = 'PROJECT.settings' 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

错误

Fri Nov 25 22:24:25 2011 - WSGI application 0 (mountpoint=DOMAIN.com|) ready on interpreter 0x679920 pid: 9552 
Traceback (most recent call last): 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 250, in __call__ 
    self.load_middleware() 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware 
    for middleware_path in settings.MIDDLEWARE_CLASSES: 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/utils/functional.py", line 276, in __getattr__ 
    self._setup() 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/conf/__init__.py", line 89, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'settings' (Is it on sys.path?): No module named settings 
DOMAIN.com [pid: 9552|app: 0|req: 1/1] 184.96.159.248() {48 vars in 1083 bytes} [Fri Nov 25 22:24:25 2011] GET/=> generated 0 bytes in 284 ms$ 
Fri Nov 25 22:24:26 2011 - WSGI application 0 (mountpoint=DOMAIN.com|) ready on interpreter 0x679920 pid: 9553 
Traceback (most recent call last): 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 250, in __call__ 
    self.load_middleware() 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware 
    for middleware_path in settings.MIDDLEWARE_CLASSES: 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/utils/functional.py", line 276, in __getattr__ 
    self._setup() 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/home/USER/virtualenv/lib/python2.7/site-packages/django/conf/__init__.py", line 89, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
+0

在这个问题上的看法2500+和2名总票数? – Alvin

回答

1

首先你并不需要所有这些SYS的。路径一塌糊涂,你的nginx vars已经为你设置了virtualenv。

我建议你进入静态模式,因为动态虚拟主机模式非常复杂,往往很难调试。简单地改变你的命令行,然后删除从nginx的三个uwsgi_param项:

/usr/local/sbin/uwsgi 
--uid www-data 
--socket 127.0.0.1:5050 
--master 
--logto /var/log/uwsgi_main.log 
--logdate 
--optimize 2 
--processes 4 
--harakiri 120 
--virtualenv /home/USER/virtualenv/ 
--pythonpath /home/USER/virtualenv/ 
--chdir /home/USER/virtualenv/PROJECT 
--env DJANGO_SETTINGS_MODULE=PROJECT.settings 
--module "django.core.handlers.wsgi:WSGIHandler()" 

应该足够(显然,你可以扔掉WSGI脚本)

+0

这种方法得到了uwsgi启动,虽然现在我得到一个错误“无法加载应用程序的加载点= - 没有应用程序加载完全动态模式 - 尽管进展 - 谢谢 – Alvin

+0

这种方法正常工作,一旦我审查它的拼写错误 - ** django.core.handlers.wsgi:WSGIHandler()**(是WSHIHandler) – Alvin

1

我的猜测是你运行在python的virtualenv Django的应用程序。如果是这样,你需要在新贵脚本激活的virtualenv还有: exect /路径/到/的virtualenv /激活& &在/ usr/local/sbin中/ uwsgi

+0

是的,我在virtualenv运行 - 没有这没有通过Upstart或控制台工作...感谢思想虽然 – Alvin