利用 Nginx 與 FastCGI 佈署 Jifty 應用程式

| No Comments | No TrackBacks

我在 jifty.org 上撰寫了此頁,在此以中文簡單說明一次。

Nginx 內附的 fastcgi 已經可以直接配合 Jifty application,請對照著 Wiki 上的設定內容,幾個重點如下:

fastcgi_param PATH_INFO $fastcgi_script_name;
Jifty 跟 Catalyst 內附的 fastcgi server 都需要 PATH_INFO 這個環境變數,FreeBSD 跟 Linux 上安裝好的 nginx 的預設 fastcgi 設定裡面並沒有此值,必需要手動加入。
root /APP/share/web/;
目錄設定到 share/web 就可以
fastcgi_pass localhost:9000;
這裡是指定 fastcgi server 的所在之處。似乎沒有方法讓 nginx 自動啟動 fastcgi server。因此需要另外啟動。

手動啟動 jifty fastcgi server 的方式為:

FCGI_SOCKET_PATH="localhost:9000" bin/jifty fastcgi &

此外,原本 Jifty 有附許多 static assets,但不知為何我給的設定並不會使 jifty fastcgi server 去 serve 那些 static assets。解決辨法之一是直接全部複製到 share/web/static 底下來:

cp -rn /usr/local/lib/perl5/site_perl/5.8.8/auto/Jifty/web/static/* share/web/static

此處的 -n 參數是「不要覆蓋現有檔案」之意,有些系統的 cp 沒有這個參數,多半可用 cp -i 替代

這組設定應該還可以再調整以解決此問題。但我覺得這種解法反而對佈署有益。因為讓 fastcgi server 來 serve static assets 完全是以牛刀殺雞。也無法善用 nginx async io,能很快回應靜態檔案的這個大優點。

更新:後來發現可以使用 Nginx 的 rewrite 規則來解決這個問題,只要你知道系統上的 @INC 路徑中,放 Jifty 那些 asset 的路徑是哪條。方法如下:

location /__jifty/static {
    alias /usr/local/lib/perl5/site_perl/5.8.8/auto/Jifty/web/static;
}

location /static {
    if (!-f $request_filename) {
        rewrite ^(.*)$ /__jifty$1 last;
    }
}

第一條規則其實是使 /__jifty/static 這個 URL 對應到 Jifty 所用來存放其內附的 asset 路徑。第二條 location 規則中則定義,如果找不到檔案的話,則重導到 /__jifty/static 去。說是重導其實也不太正確,因其並非經過瀏覽器的重導,只是在 Nginx 內部而已。

Labels: , , ,

No TrackBacks

TrackBack URL: http://pub.gugod.org/mt/mt-tb.cgi/1

Leave a comment

About this Entry

This page contains a single entry by gugod published on September 29, 2008 7:14 PM.

賣 Macbook Pro 電腦一台 was the previous entry in this blog.

將 svn 檔案庫搬到 github 上的指令 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Pages

Powered by Movable Type 4.35-en