erlywebでテンプレートの再コンパイル

erlywebにはErlTemplateというテンプレートがあるが、erlyweb:compile/2でコンパイルする必要がある。開発の初期は気にならないが、いったんローンチしたあとにテンプレートを変更したいときにどうすればいいのかを調べてみた。

こうならいいな

erlからerlyweb:compile/2でコンパイルしてbeamファイルを更新すると、その後のアクセスからyawsが変更されたモジュールを再読み込みしてくれる。
しかし、実際は読み込んでくれないみたい。そこでよりベタな方法を考える。

ベタな方法

erlからコンパイルした後、yaws --stop; yaws --startによって再起動する。
しかしこれでは、サービス中断が発生してしまうので、何のためのerlangなんだかわけがわからない。

ましな方法

erlからyawsノードへリモートコンパイルを行う。そのためには事前にyawsにノード名をつけて起動しておく必要がある。そうするとたとえばyawsにyaws@nsというノード名をつけていたとして、

(erl@ns)1> rpc:call('yaws@ns', erlyweb, compile, ["/path/to/app", [compile,options]]).

のようにする。そうするとyawsノード側でコンパイルとロードが行われて、テンプレートが反映されるようになる。
もっといい方法がないかわからないが、とりあえずはこれでよしとしよう。