mod_mruby 0.0.1をリリースしてみた

とりあえず、「動く」事を優先して、mod_mrubyの0.0.1をリリースしました。

コンパイルの仕方とインストールのし方はソースのREADMEに書いています。現状、mod_mrubyで何ができるかと、今後何をしていきたいかをまとめておきます。

mod_mrubyのインストール

現状は以下のように導入します。上記のGithubからソースをとってきて、まずはコンパイルします。mrubyは/usr/local/src/mruby/あたりに置いてあるものとして話を進めます。mrubyのライブラリやincludeのパスに注意して下さい。

apxs -c -I /usr/local/src/mruby/src/ -I/usr/local/src/mruby/include/ -lm /usr/local/src/mruby/lib/ritevm.a mod_mruby.c

次にモジュールをコピーします。

cp .libs/mod_mruby.so /etc/httpd/modules/.

これで、Apacheをリスタートすれば完了です。

/etc/init.d/httpd restart

今できること

  • Apacheのコンテンツが処理されるタイミングで指定のmrubyスクリプトをApacheが直接実行できる
    • Apacheのconfにフックのタイミングとスクリプトのパスを設定として書く
    • 現状はap_hook_handlerのタイミングのみ
    • mrubyスクリプトにフックのタイミングでやりたい事を書けば一応Apacheモジュールのような事が今でもできる
  • ap_mrb_string.hにApacheからmrubyスクリプトを実行した時のみに有効なクラスとメソッドを定義
    • 現在はmrubyスクリプトでApache.sleep(sec)で指定した時間だけsleepするメソッドを書いてみた
    • 今後はmrubyでApache特有の情報を取得したり書き換えたりできるようにしたい(rewiteとかでできることも含めて)

例えば設定は以下のように書きます。

LoadModule mruby_module modules/mod_mruby.so
mrubyHandler /var/www/html/hello.mrb

フックさせるmrubyのサンプルソースは、Apacheからmrubyを実行する時のみ有効なライブラリ群を使うと、例えば以下のようになります。

require 'Apache'

Apache.sleep(1)

 

今後やりたいこと

少なくとも、mod_luaでやれているような事はやって行きたいと思っています。

  • フックさせるタイミングを増やす
    • mrubyスクリプトをフックするだけでなくスクリプト内のメソッドをフックする
    • mrubyHandlerのようなディレクティブを増やしていく(mrubyTranslateNameとか)
  • request_recやserver_rec、conn_recの構造体の情報をmrubyで受け取れるようにする
    • mod_luaはrequest_recの一部だけしか取れない
  • ApacheのAPIをmruby上で実行できるようなライブラリを増やす(ap_mrb_string.hを拡張していく)
    • 例えば、mruby上でap_rputsできるようにする(mrubyの出力をクライアントに返す)とか
    • request_recの中身書き換えるとか
    • エラーログの出力とか

逐次時間を見つけて実装していきます。

「mod_mruby 0.0.1をリリースしてみた」への1件のフィードバック

コメントは受け付けていません。