開発中は reloader を使うべし
mochiweb に付属の reloader を使うと、更新のあった module を再読み込みしてくれるので、デバックの手間が少し減る。
source の中身
gen_server として常駐する。
timer:send_interval/2 を使って自分自身に一秒間隔でメッセージ doit を送る。
doit を受信すると、code:all_loaded/0 でロード済みモジュールの一覧を取得し、更新があるモジュールは、code:purge/1 して code:load_file/1 している。
更新の判定は、file:read_file_info/1 で beam ファイルの情報を取得して、前回のチェック日時より新しければ更新ありと判定している。
使い方
単純な gen_server なので、reloader.beam がカレントディレクトリに存在するなら下記の通り。
% erl -s reloader
reloader.erl がカレントディレクトリに存在するなら下記の通り。
% erl 1> c(reloader). 2> reloader:start().
あとは、ロード済みの module が更新される度に再読み込みしてくれる。
id:cooldaemon:20071021 の例くらいであれば恩恵を感じないが、ロードしているモジュール数が多いプロジェクトであれば、その恩恵を感じられる。
ライセンス
mochiweb は MIT ライセンスなんだけど・・・reloader も MIT ライセンスだよね?
Mochi Media, Inc.
Mochikit はじめ、Mochi Media, Inc. 製の code は追ってて楽しい。設計が美しく勉強になる。