けいぞうのメモ帳

言語設計のお勉強

libvmod_mrubyなるものを作り始めた

概略

 HTTPアクセラレータVarnish Cacheの設定言語VCL。そのVCLにmrubyのコードを呼び出せるようにした。
 今後はRubyVCLの設定をスクリプティングできるようにして、C言語ライクなVCLより柔軟性が高いであろうRubyDSLで設定をいじれるようにしたい。ので、作り始めた。

詳細

requrement

Varnish Cache 4.0.0 or later(開発ではHEADを使っている)
root権限

git clone http://github.com/KeizoBookman/libvmod_mruby.git
cd libvmod_mruby/src
git clone http://github.com/mruby/mruby.git
cd mruby
make
cd ../..
./autogen.sh
./configure
make
make install

そしてdefault.vclなどのVarnishの設定ファイルに以下のように記述します。(Archでは/etc/varnish/default.vcl)

import mruby;

sub vcl_deliver {
 
    set resp.http.mruby = mruby.exec(" 'hello world' ");
}

と設定してVarnish Cacheを起動させ、VarnishCacheの立っているポートにアクセスすると
ヘッダにmrubyと言う名前のものが追加されておりhello worldという値が入っているはずです。
今できるのはこれだけであとはintegerかvoidのRubyスクリプトVCLから呼び出せます。

今後

 今のところ出来ることはほとんどないけど、RubyからVCLを呼び出せるようにするところまではちゃんと実装するつもりです。
masterは一応make出来る状況を維持しておくけれどもちゃんと動く保証はありません。github.com

余談

 ネタ自体は一年位前に人にもらって何度か作ろうとしてたけどやっと実装を始められたのでちょっとワクワクしている。