Erlang プロジェクトの配布形態などを見る

Erlang で書かれたアプリケーションを配布する場合に

  • ビルド方法
  • ディレクトリ構成
  • 起動・再起動・終了方法

などをどう提供しているのかを調べてみた。


id:Voluntas さんと id:cooldaemon さんに教えてもらった候補たち RabbitMQ, Yaws, MochiWeb, ejabberd, Kai を見ていく。

RabbitMQ

  • Makefile が参考になる
    • automake じゃない
    • start-cover
  • os_mon オプション
    • OS Monitor Application
  • 起動オプション
    • "+K true +A30 -kernel inet_default_listen_options [{nodelay,true},{sndbuf,16384},{recbuf,4096}] -kernel inet_default_connect_options [{nodelay,true}]"
  • erl_call
  • 起動は scripts/rabbitmq-server などプラットフォーム毎に存在
    • これは良い
  • -boot オプションは何?
    • systools 勉強しないと
  • dialyzer
  • gen_server2
    • core で使っている
  • テストが見当たらない。
    • 追記:あった。
  • rabbitmqctl(sh) と rabbitmqctl モジュール。これ良い真似しよう。
  • logger は独自 gen_server がいる
  • node_monitor

Yaws

  • dialyzer
  • 独自 logger
  • C言語で書かれた hashtable ライブラリ、sendfile
  • scripts に OS 毎に init.d/yaws 的なものが。
    • XEC="${daemon} ${heart} +K ${kpoll} -pa ${yawsdir}${delim}ebin ${xpath} ${sname} ${pdist} ${erlarg} ${debug} -run yaws ${trace} ${conf} ${runmod} ${mnesia} ${id}"

MochiWeb

  • 小さなプロジェクトなので見通しが良い
  • ライブラリなので install などのサポートがない。

ejabberd

  • automake
  • ejabberdctl
    • -noinput -detached
  • 独自 logger

Kai

結論

RabbitMQ 最強。レベル高すぎる。