prism

2011-12-28

uWSGI --vhost



用 uWSGI 來啟動 wsgi 的服務,除了傳統的方式,還可以一次管理多個 wsgi 的服務

還有另外一種作法 Emperor 可以對特定資料夾裡所有的設定檔,個別管理,更適合作 PASS 服務的人, http://projects.unbit.it/uwsgi/wiki/Emperor

我的需求沒有這麼大,只是一起跑多個 wsgi ,省一些記憶體,就可以了


用 daemontools 來啟動,這裡面的 buffer-size 有要吃外部的 post back 要加大,不然,預設的實在是太小,最重要的是預設值 PayPal
IPN callback 吃不下,收到錢還不知道,夠重要了吧

#!/bin/bash
# default buffer-size is 4k 4096
exec setuidgid yourname uwsgi --buffer-size 32768 -s 127.0.0.1:3031 -p 3 -M --vhost

以在 Debian 上面的 nginx 裡面的設定範例

 server {
listen   80;
server_name  yourcoolsite.com;
location /static {
    alias /yourstatic/folder/;    
}
location / {
    include     uwsgi_params;
    #uwsgi_pass   unix:/tmp/digez.sock;
    uwsgi_param UWSGI_PYTHONPATH /home/yourname;
    uwsgi_param UWSGI_CHDIR /home/yourname/yourcoolsite;
    uwsgi_param UWSGI_ENV DJANGO_SETTINGS_MODULE=yourcoolsite.settings;
    uwsgi_param UWSGI_MODULE application;
    uwsgi_pass   127.0.0.1:3031;
 }


放在 /home/yourname/yourcoolsite/ 的 wsgi application.py script 範例
sys.path.append 那兩行,在 Django 1.4 以下,也就是 1.3.1 (含) 以下,都要加,比較不會有路徑的問題

Django 目前的 Dev(或是 trunk 或是 github 上面 master) 開發版,已經改變 project 的路徑,所以不用再加了

# coding: utf-8
import sys
import os
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
sys.path.append('..')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
                                                                                                                                     
import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

沒有留言: