mruyをApacheのモジュールとして組み込むmod_mruby入れてみる。
インストール
まず、mrubyのインストールから。
$ git clone https://github.com/mruby/mruby.git $ make
makeが終わるとbinフォルダ直下にバイナリが生成される。
$ mruby -v mruby - Embeddable Ruby Copyright (c) 2010-2012 mruby developers
続いて、mod_mrubyのインストール。
$ git clone https://github.com/matsumoto-r/mod_mruby.git
直下にMakefileがあるので自分の環境用に、apxsとapachectlのパスを書き換える。あとApache 2.4使ってるのでDEF=-D__APACHE24__のコメントアウトを外す。
... # the used tools # use apache 2.2 #APXS=/usr/sbin/apxs #APACHECTL=/etc/init.d/httpd # use apache 2.4 APXS=/usr/local/apache2/bin/apxs APACHECTL=/usr/local/apache2/bin/apachectl DEF=-D__APACHE24__ ...
※あと、libjson.laのパスも違ったので書き換えた。
$ make $ make install
makeが正常に終了すると、Apacheのモジュールとして/usr/local/apache2/modules/mod_mruby.soが生成され、httpd.confにmod_mrubyのロード処理が追記される。
サンプル
/usr/local/apache2/htdocs/test.mrbという↓なファイルを作成する。
require 'Apache' r = Apache::Request.new() r.content_type = "text/html" Apache.rputs("test<br>") Apache.rputs("OK status= #{Apache::OK}<BR>") Apache.rputs("DECLINED status= #{Apache::DECLINED}<BR>") Apache.rputs("HTTP_OK status= #{Apache::HTTP_OK}<BR>") Apache.rputs("HTTP_SERVICE_UNAVAILABLE status= #{Apache::HTTP_SERVICE_UNAVAILABLE}<BR>") Apache.rputs("filename= " + r.filename + "<BR>") Apache.rputs("uri= " + r.uri + "<BR>") Apache.rputs("user= " + r.user + "<BR>") Apache.rputs("the_request= " + r.the_request + "<BR>") Apache.rputs("protocol= " + r.protocol + "<BR>") r.filename = "/usr/local/apache2/htdocs/index.html" r.uri = "/index.html" r.user = "hoge" r.the_request = "hoge" r.protocol = "hoge" Apache.rputs("---- request_rec changed ----<br>") Apache.rputs("filename= " + r.filename + "<BR>") Apache.rputs("uri= " + r.uri + "<BR>") Apache.rputs("user= " + r.user + "<BR>") Apache.rputs("content_type= " + r.content_type + "<BR>") Apache.rputs("the_request= " + r.the_request + "<BR>") Apache.rputs("protocol= " + r.protocol + "<BR>") Apache.rputs("hostname= " + r.hostname + "<BR>") Apache.return(Apache::OK)
続いて、httpd.confにtest.mrbを使ったフックを定義。
<IfModule mruby_module> mrubyTranslateNameFirst /usr/local/apache2/htdocs/test.mrb </IfModule>
これでApacheを再起動し、http://localhost/fugeとかにアクセスすると、↓な画面が表示される。