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