2012
Jul
01




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 功能,將全部的 js extension 都強迫指定不安裝,所以增加指令 socket=0, memcached=0 ... ,如果你想要安裝這些額外的 js extension ,記得先去安裝相關的 header 檔。

編譯 v8cgi 指令

scons reuse_context=1 socket=0 memcached=0 mysql=0 sqlite=0 fcgi=0 gd=0 module=1 apache_path=/usr/local/include apr_path=/usr/local/include/apr-1/ config_file=/etc/v8cgi.conf

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

  1. system.stdout("this is a test\n");
  2. var data={"type":"js","content":"empty"};
  3. system.stdout(JSON.stringify(data), null, " ");

執行指令: v8cgi test_c.js

Execut Result:

  1. [puritys]test$ v8cgi test2.sjs
  2. this is a test
  3. {"type":"js","content":"empty"}

v8cgi 之 apache conf

這時 apache 還沒辦法讀懂 v8cgi 的檔案,我們要先使得 apache 載入 v8cgi module ,另外再指定副檔名「sjs (server js)」的檔案類型,這裡只能加入 AddHandler ,指定 *.sjs 由 v8cgi 來處理即可。

apache conf 修改加入
  • LoadModule v8cgi_module modules/mod_v8cgi.so
  • AddHandler v8cgi-script sjs

最後再重啟 apache 。

v8cgi demo : Hello World

這裡一樣寫一段簡單的 javascript code ,然後再用 browser 去讀取 v8cgi 執行後的結果,一切正常的話網頁就會顯示出 Hello World 的文字囉。

  1. require("http");
  2. response.write("<h1>Hello World!</h1>");

下一頁將說明如何:手動建立 v8cgi extension


回應 (Leave a comment)