休假,可以作些放鬆的事情。不過休息一下之後還是得辦正事 :(

為了提振精神,我決定把放著很久沒動的本 blog 程式作點昇級。本站 (http://blog.seety.org/everydaywork/,下同) 自從改用 Django 重新設計以來,一直是用 FastCGI 進行佈署的。在最近發行的 Django 0.95 中,也包含了 magic-removal 之後加入的 FastCGI 支援。當然,Django trunk 早就有這東西了,不過直到今天以前,我都還在用舊的 fcgi.py

Django 0.95 不但已整合了 FastCGI 佈署程式,也寫好了 FastCGI 佈署文件,FastCGI 也成了 Django 建議的佈署方式之一。在某些情況下,用 FastCGI 佈署的動態程式會跑得比用 mod_python 佈署下的程式有效率,該文件有提到這一點。

Note

hmmm.... 不過我還沒有仔細研究是在「哪些」情況下。

好,在使用 django.core.servers.fastcgi 模組 (Django 中的 FastCGI 佈署支援) 前,要先安裝 flup。你用 Debian testing/unstable 的話,直接:

$ apt-get install python-flup

就好了 (that's one of the reasons for why I love Debian)。然後,在你的 htdoc 目錄下 (我用 Apache2) 開一個 blahblah.fcgi wrapper script 檔,在裡面寫些 Python script:

!/usr/bin/env python2.4
import sys, os

sys.path.append( '/path/to/your/packages' )
os.environ['DJANGO_SETTINGS_MODULE'] = \
    'yoursite.settings'

from django.core.srevers.fastcgi import fastcgi
runfastcgi([ "method=threaded", "daemonize=false" ])

Django 的文件裡有更詳細的說明。本來,看他們的說明應該就足夠了,遺憾的是,Django 提供的 .fcgi wrapper 裡使用的

sys.path.insert(0, "/home/user/python")

寫法,有時候會出問題。我如果像 Django 文件那樣插入 Python search path (把新的 path 放在舊的前面),Apache2/FCGI 會報:

FastCGI: comm with (dynamic) server "blahblah.fcgi"
aborted: (first read) idle timeout (30sec)
FastCGI: incomplete headers (0 bytes)
received from server "blahblah.fcgi"

這樣的錯誤,因為 blahblah.fcgi 根本無法啟動。我得把新的 search path 放到舊的 path 後面,blahblah.fcgi 才會乖乖聽話。

在 Apache2 裡當然還得作些必要的佈署,不過 Django 文件裡寫得很清楚了。Add-Handler, RewriteRules 的設定都沒什麼問題。本小站又成長了一些 :)

Update, OT: 順帶一提,VIM 7 多了幾個令人愉快的新功能:

  1. 在 remote X 上編輯的時候,gvim 的標題列上會主動秀出該 gvim instance 所在的主機位置。對編輯多主機檔案的人來說方便很多。以前一個 workspace 開十幾個 gvim,編輯好幾個主機上的檔案,檔名和路徑又都一樣,非常考驗記憶力 :)
  2. undo 時會在最下面秀出該動作是在多久前執行的。這又是一個減低編輯者腦力消耗的好功能。
Posted by yungyuc at 11:25, 0 comment, 0 trackback.
Navigate
Add a trackback
Add a comment

Your name. (required)

Your personal website. (optional)

Your email address. Will not show in page. (suggested, but optional)

Text format is "Plain Text".

Enter "FCFyx"
© hover year to navigate month: powered by django