2013-05-14 96 views
8

我有一個在我的服務器上運行的python應用程序(具體的Django)。在昨天之前,它成功運行在mod-wsgi下的apache下,幾乎沒有問題。我有兩個主要的原因切換到nginx的:uwsgi服務沒有啓動

  • 性能 - 下nginx的,我對每個請求幾乎一半時間
  • 兩個應用程序一起未成功apache下運行 - nginx的
  • 第三個原因解決對我來說更好的配置

我有一個uwsgi服務的問題。首先,我將包括應用程序的WSGI文件:

import os 
import sys 

path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 

if path not in sys.path: 
sys.path.append(path) 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "usporion.settings") 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

然後,我有init的應用uwsgi.ini文件,位於/etc/uwsgi/apps-enabled/usporion.ini下:

[uwsgi] 
plugins = python 
uid = www-data 
gid = www-data 
uwsgi-socket = /srv/sockets/usporion.sock 
chmod-socket = 664 
chdir = /srv/www/usporion 
pythonpath = /srv/www/usporion 
module = usporion.wsgi 
env = DJANGO_SETTINGS_MODULE=usporion.settings 
logdate = True 
logto = /var/log/uwsgi/usporion.log 
#daemonize = /var/log/uwsgi/usporion.log 
vacuum = True 
max-requests = 1000 
processes = 5 
threads = 10 
workers = 5 
vhost = True 

注:我已經試過有守護進程註釋掉(但這不適用於當前的使用情況)。

最後,我有這樣的nginx的配置:

upstream django { 
    server 95.168.193.219:80; 
} 

server { 
    listen   95.168.193.219:80; 
    server_name  usporion.cz; 
    return  301 $scheme://www.usporion.cz$request_uri; 
} 

server { 
    listen   95.168.193.219:80; 
    server_name  www.usporion.cz; 
    charset   utf-8; 

    client_max_body_size 100M; 

    location /media { 
     alias  /srv/www/usporion/media; 
     expires  1d; 
    } 

    location /static { 
     alias  /srv/www/usporion/static; 
     expires  1d; 
    } 

    location/{ 
     root  /srv/www/usporion; 
     include  uwsgi_params; 
     uwsgi_pass unix:///srv/sockets/usporion.sock; 
    } 
} 

運行命令uwsgi --ini /etc/uwsgi/apps-enabled/usporion.ini工作正常,我能看到的應用程序工作在網絡上。但是,如果我做service uwsgi start,服務沒有啓動(FAIL)沒有消息,我無法找到日誌中的任何內容。在啓用了應用程序的情況下運行此服務時沒有usporion.ini工作正常。

我會很高興的任何幫助,我可以避免在屏幕下運行uwsgi「服務」,但作爲正常服務運行。

這裏是DIST信息:

[email protected][name]:/etc/nginx/sites-enabled# uname -a 
Linux [name] 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU/Linux 
[email protected][name]:/etc/nginx/sites-enabled# cat /etc/debian_version 
6.0.7 
[email protected][name]:/etc/nginx/sites-enabled# nginx -v 
nginx version: nginx/1.2.6 
[email protected][name]:/etc/nginx/sites-enabled# uwsgi --version 
1.2.3-debian 
[email protected][name]:/etc/nginx/sites-enabled# python --version 
Python 2.7.3 

最後,如果有人想給我一些建議配置(我是新來的nginx的,它的歡迎),這是8核Xeon服務器2.4 GHz的16GB的RAM,其中一半是爲這個應用程序保留。

回答

2

錯誤是uwsgi配置:

[uwsgi] 
plugins = python 
uid = www-data 
gid = www-data 
uwsgi-socket = /srv/sockets/usporion.sock 
chmod-socket = 664 
chdir = /srv/www/usporion 
pythonpath = /srv/www/usporion 
wsgi-file = /srv/www/usporion/usporion/wsgi.py 
env = DJANGO_SETTINGS_MODULE=usporion.settings 
logdate = True 
logto = /var/log/uwsgi/usporion.log 
#daemonize = /var/log/uwsgi/usporion.log 
vacuum = True 
max-requests = 1000 
master = True 
enable-threads = True 
processes = 5 
threads = 10 
vhost = True 

區別是wsgi-file,你有什麼替代舊module配置值。然後,出現關於丟失的wsgi文件的錯誤(首先寫入錯誤)。這裏沒有必要使用daemonize,因爲debian的服務是自動定義的。不過,我認爲vacuum,logto並不是必需的,還有chmod-socketuwsgi-socket - 它們都是由debian的服務定義的。我會解決這個問題並完成這個答案。

不過,從嘗試等等,這樣的配置是基本的和其他一切應該全自動denifed還是有一定的默認值或者Django的itselves:

[uwsgi] 
plugins = python 
chdir = /srv/www/usporion 
pythonpath = /srv/www/usporion 
wsgi-file = /srv/www/usporion/usporion/wsgi.py 
+0

有同樣的問題,但不同的原因。對我來說,評論「listen」指令允許uwsgi啓動。沒有錯誤消息。有趣的追蹤! – Homer6