v8cgi (ServerSide JavaScript)

http://code.google.com/p/v8cgi/

v8cgi : CGI Wrapper around V8 JavaScript engine
要は、CGIJavaScriptで書きましょうというプロジェクト。


一昔前なら悪い冗談のようですが、これから先確実にJavaScriptの需要は増えるでしょうから、押さえておいて損はないでしょう。


というわけでBuild -> Install -> Sampleのプロセス。
今回はCentOS 5.3 x86 上に環境を構築しました。Linux初心者なので間違っている点もあると思いますが、ご容赦ください。

1.Build http://code.google.com/p/v8cgi/wiki/Compiling
まず、v8をBuildしておく必要あり。 (shared libraryとして)
v8のsrc directoryで > scons library=sharedで出来ます。

v8cgiソースのダウンロード
svn経由でhttp://code.google.com/p/v8cgi/source/checkoutにRepositoryの場所があります。

ダウンロードしたDirectoryで
> scon
としたいところですが、結構依存関係があります。
v8cgiの機能をフルに利用するためには、
MySQL, SQLite, GD, ApacheのLibrary & Headersが必要です。 (JavaScript上からこれらのライブラリの機能にアクセスできるようにするため)

以下、はまった点をメモします。

sconsのダウンロード・インストール

> wget http://prdownloads.sourceforge.net/scons/scons-1.2.0-1.noarch.rpm
> rpm -ivh scons-1.2.0-1.noarch.rpm

v8をダウンロードしたフォルダで、

> scons

/bin/bash : o: command not foundというエラーが大量に出る。
色んなライブラリが足りてない模様

> yum install gcc*

完了したら

> cp libv8.so /usr/lib


gdをまだインストールしていない場合

> yum install gd gd_devel


mysqlのライブラリ関係をまだインストールしていない場合

> yum install mysql-devel


httpdのライブラリ関係をまだインストールしていない場合

> yum install httpd-devel


sqlitesqliteのライブラリ関係をまだインストールしていない場合

> yum install sqlite sqlite-devel

v8cgiのsrc directoryにいき、

> scons -Q -h

コマンドラインオプションが見れます。

デフォルトではmysql, apache, arpのヘッダが必要です。

僕の環境では

> scons

の結果、
/usr/bin/ld: cannot find -lmysqlclientというエラーが出て、結局 回避方法がわからないので、
今回はmysql関連はあきらめました。


また、他のIncludeファイル(apache, apr)がデフォルトとは違う場所にあるので、僕の環境では

> scons mysql=0 apache_path=/usr/include/httpd/ apr_path=/usr/include/apr-1/

でBuildすることができました。

><
><
2.Install http://code.google.com/p/v8cgi/wiki/Installation
Buildの結果できるモジュールをコピー

> cp mod_v8cgi.so /usr/lib/apache2/modules/

httpd.confの編集 (cgi binaryと apache moduleとしての2種類の登録がありますが、今回はapache moduleとして登録します)

LoadModule v8cgi_module /usr/lib/apache2/modules/mod_v8cgi.so
AddHandler v8cgi-script .ssjs
v8cgi_Config /etc/v8cgi.conf

/usr/lib/に/v8cgiを作成してv8cgi/lib以下をすべてコピー
confをRenameして /etc/v8cgi.confにおく

> cp ./v8cgi/lib/* /usr/lib/
> cp ./v8cgi.conf.POSIX /etc/v8cgi.conf


3.Sample


ApacheのHttpDirectoryに test.ssjsを作成

var a = 0, b =3;
response.write(a+b);
response.write(JSON.stringify(system.env));

ブラウザからhttp://localhost/test.ssjs
を実行で、下記画面のように表示されればOK.


どういったAPIが使えるかはhttp://code.google.com/p/v8cgi/wiki/APIを参照。
今回はMySQL抜きなので、http://code.google.com/p/v8cgi/wiki/API#MySQLは使えませんが。

明日からしばらくサンプルコード続きになると思います。