node.js 最近很熱門,大家都知道它能夠讓工程師在製作網站時,前後端皆使用 javascript 來寫程式,但是 node.js 必須自行實作 apache 的每一樣功能,這對於開發一個大型的 web server 是非常的不利,會導致開發時間過長,以及web server 實作功能不完全。
v8cgi 就如同 php 一樣,可以搭配 apache 來開發網站,所以 apache 的 rewrite , htaccess , allow access 等等就不須要再重新實作一次,我們只要專注於開發網站即可,現在就先來安裝 v8cgi。
編譯 v8cgi 前置作業
在安裝 v8cgi 之前,須必先把 v8 給裝起來,v8 的功能主要是能夠使用 Linux command line 執行 javascript 語法,並提供基本的 function 來使用,安裝方式請參考「 這裡 」
另外我要搭配 apache 一起使用,所以也必須安裝 apache ,安裝方式「這裡」
編譯與安裝 v8cgi
安裝好 v8 與 v8 的 library 後,接著要去下載 v8cgi 原始檔,再使用 scons方式編譯, v8cgi 有提供一些常用的 library 如 mysql , memcache , sqlite, fastcgi,但是下載回來的原始檔,並沒有包含這些 library 的 header 檔,所以如果你有須要這些功能,並且要編譯的話,就得先去下載這個 library 的 header 檔回來安裝,通常是一些檔案名稱為 mysql-devel 的檔案。
- v8cgi 下載點
- 直接下載 : http://code.google.com/p/v8cgi/downloads/detail?name=v8cgi-0.9.3-src.tar.gz&can=2&q=
- 使用 svn 下載 : svn co svn+ssh://v8cgi.googlecode.com/svn/trunk
接著解壓縮後,進入資料夾,就開始編譯吧,這裡只使用最基本的 v8cgi 功能,將全部的 js extension 都強迫指定不安裝,所以增加指令 socket=0, memcached=0 ... ,如果你想要安裝這些額外的 js extension ,記得先去安裝相關的 header 檔。
v8cgi 設定檔的路徑預設是 /etc/v8cgi.conf ,這個檔案很像是 php.ini 一樣,可以設定一些要載入的 extension ,或是設定某些變數,這個設定檔的路徑是可以修改的,只要在編譯的時候,加入 config_file = /xxx/xxx.conf 。
最後就要將編譯好的檔案,搬到正確可以執行的目錄下
- cp v8cgi /usr/local/bin/
- cp mod_v8cgi.so /$(apache_path)/modules/
- cp v8cgi.conf.posix /etc/v8cgi.conf
- cp lib/* /$(v8cgi_path)/lib/ (路徑可以自定,只要修改 v8cgi.conf 的 require.paths.push 相同即可 )
lib/* 這裡放的是 v8cgi 最基本的 library ,要全部搬到正確的目錄,內容包含 http , request ,response , process 等等。
v8cgi command line
有了 /usr/local/bin/v8cgi 之後,就可以用 command line 的方式執行 javascript 程式了,這裡寫一段簡單的 js 程式來 demo。
File : test_c.js
- system.stdout("this is a test\n");
- var data={"type":"js","content":"empty"};
- system.stdout(JSON.stringify(data), null, " ");
執行指令: v8cgi test_c.js
Execut Result:
- [puritys]test$ v8cgi test2.sjs
- this is a test
- {"type":"js","content":"empty"}
v8cgi 之 apache conf
這時 apache 還沒辦法讀懂 v8cgi 的檔案,我們要先使得 apache 載入 v8cgi module ,另外再指定副檔名「sjs (server js)」的檔案類型,這裡只能加入 AddHandler ,指定 *.sjs 由 v8cgi 來處理即可。
最後再重啟 apache 。
v8cgi demo : Hello World
這裡一樣寫一段簡單的 javascript code ,然後再用 browser 去讀取 v8cgi 執行後的結果,一切正常的話網頁就會顯示出 Hello World 的文字囉。
- require("http");
- response.write("<h1>Hello World!</h1>");
下一頁將說明如何:手動建立 v8cgi extension