サーバサイドJavaScript「Jaxer」を使ってみた

http://jaxer.org/

Debianでのインストールとサンプルプログラム。
サービスは試していないです。

Jaxerのインストール

http://jaxer.org/downloadからはApacheが同梱されたものがダウンロードされるが、今回はJaxerのみインストールした。*1
1. Jaxer_package_withApache.tar.gzをダウンロード
2. 展開・インストール
今回は、"/opt/AptanaJaxer"へインストール。

$ gzip -dc Jaxer_package_withApache.tar.gz | tar xvf -
$ cd ./AptanaJaxer
$ sudo mkdir -p /opt/AptanaJaxer
$ sudo cp -Rf ./jaxer /opt/AptanaJaxer/
$ sudo cp -Rf ./scripts /opt/AptanaJaxer/
$ sudo cp -p /opt/AptanaJaxer/jaxer/connectors/mod_jaxer.so /usr/lib/apache2/modules/
$ sudo cp -p /opt/AptanaJaxer/jaxer/confs/jaxer-linux.httpd.conf /etc/apache2/mods-available/jaxer.conf

3. モジュールの設定
"/etc/apache2/mods-available/jaxer.conf"の以下の設定を削除する。

LoadModule jaxer_module "/opt/AptanaJaxer/jaxer/connectors/mod_jaxer.so" # 最初の部分



Include "/opt/AptanaJaxer/local_jaxer/conf/*.httpd.conf" # 最後の部分

"/etc/apache2/mods-available/jaxer.load"を作成する。

LoadModule jaxer_module /usr/lib/apache2/modules/mod_jaxer.so

モジュールの有効化。

$ sudo a2enmod jaxer

4. スクリプトの修正
Jaxerの起動/停止用スクリプトApache部分をコメントアウトする。

$ diff /opt/AptanaJaxer/scripts/start.sh.org /opt/AptanaJaxer/scripts/start.sh
10c10
< export JAXERBASE=`pwd`
---
> export JAXERBASE=/opt/AptanaJaxer
15c15
< $JAXERBASE/scripts/startApache.sh
---
> #$JAXERBASE/scripts/startApache.sh
$ $ diff /opt/AptanaJaxer/scripts/stop.sh.org /opt/AptanaJaxer/scripts/stop.sh
10c10
< export JAXERBASE=`pwd`
---
> export JAXERBASE=/opt/AptanaJaxer
14c14
< $JAXERBASE/scripts/stopApache.sh
---
> #$JAXERBASE/scripts/stopApache.sh

ライブラリのインストール

Jaxerに必要なライブラリをインストールする。
私の環境では以下のライブラリが足りなかったが、環境によって違うと思うので"ldd /opt/AptanaJaxer/jaxer/jaxer"で調べる。

$ sudo aptitude install libmozjs-dev xulrunner-1.9 iceape-dev-bin libnspr4-0d libgtk2.0-0 libatk1.0-0 libpango1.0-0 libfontconfig1 libxrender1 libxinerama1 libxi6 libxrandr2 libxcursor1 libxcomposite1 libxdamage1 libcairo2 libglib2.0-0 libxfixes3 libnss3-1d libxt6 libxft2 libsqlite3-dev

起動

起動は、「Jaxer」->「Apache」の順。

$ sudo /opt/AptanaJaxer/scripts/start.sh
*** ok
*** ok
*** ok
*** ok
*** ok
*** ok
*** ok
*** ok
*** ok
Option: --configfile=/opt/AptanaJaxer/local_jaxer/conf/JaxerManager.cfg
*** ok
Option: --maxmemory=0
*** ok
Option: --pid-file=/opt/AptanaJaxer/jaxer/jaxer.pid
Option: --cfg:tempdir=/opt/AptanaJaxer/tmp
*** ok
Option: --log:output=/opt/AptanaJaxer/logs/jaxer.log
*** ok
JaxerManager 1.0.3.4547 (web 4327, command 4328)
$ sudo /etc/init.d/apache2 start

"http://%server-name%/aptana/"にアクセスして、以下の画面が表示されればOK。

サンプルプログラム

テキストボックスに数字を入力してボタンを押すと、入力した数字の範囲内でランダムな数字を表示するプログラムを書いた。
ランダムな数字を計算する処理(script runat="server-proxy"の部分)がサーバサイド。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Server-Side JavaScript</title>
      	<script runat="server-proxy">
	function getRamdomNum(num) {
      	    var	result = Math.floor(Math.random() * num);
      	    return result;
      	}
      	</script>
      	<script type="text/javascript">
        <!--
        function doFunc() {
            var rum = document.getElementById("num");
            var obj = document.getElementById("msg");
            var ramdom = getRamdomNum(num.value);
            obj.innerHTML = ramdom;
        }
        //-->
        </script>
    </head>
    <body>
        <h3>Server-Side JavaScript</h3>
        <div id="msg"></div>
        <input type="text" id="num">
        <input type="button" onclick="doFunc();" value="click!!">
    </body>
</html>

上記のHTMLにアクセスしてソースを見ると、サーバサイドの処理である"getRamdomNum()"のコードは表示されない。


http://jaxer.org/

*1:Apachedebパッケージを使用