私は rebar を使用して erlang リリースをビルドすることに精通しています。現在、relx を使用してリリースをパッケージ化しようとしています。
コードは erlang.mk でビルドします。バンドルしたいアプリケーションをリストした relx.config があります。コマンド
./relx -o rel/myrel
成功します。
ただし、リリースの開始は失敗し、クラッシュします。
cd rel
./myrel/bin/myrel console
Exec: /Users/ivan/tmp/rel/myrel/erts-5.9.2/bin/erlexec -boot /Users/ivan/tmp/rel/myrel/releases/1.0.0/myrel -env ERL_LIBS /Users/ivan/tmp/rel/myrel/releases/1.0.0/lib -config /Users/ivan/tmp/rel/myrel/releases/1.0.0/sys.config -args_file /Users/ivan/tmp/rel/myrel/releases/1.0.0/vm.args -- console
Root: /Users/ivan/tmp/rel/myrel
{error_logger,{{2014,2,4},{11,43,6}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,{'EXIT',{undef,[{prim_inet,open,[udp,inet],[]},{inet,open,7,[]},{inet_config,set_hostname,0,[]},{inet_config,init,0,[]},{inet_db,start_link,0,[]},{supervisor,do_start_child,2,[]},{supervisor,start_children,3,[]},{supervisor,init_children,2,[]}]}}},{offender,[{pid,undefined},{name,inet_db},{mfargs,{inet_db,start_link,[]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2014,2,4},{11,43,6}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}
Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
これは、リリースが prim_inet:open/2 を見つけられないように見えます - 含むアプリケーションが開始されていないか、正しいパスがないためです。
relx.config に inets (およびその他のアプリケーション) をリストしてみました。無効。
relx ログから、私の erlang ライブラリ (/usr/local/lib/erlang/lib 内) について知っているようです。
不足しているものと、上記のリリースを機能させる方法を理解するのを手伝ってくれる人はいますか?
更新: 上記の ERL_LIBS ディレクトリは作成されません。一方、指定したアプリはすべて myrel/lib/ にあります。だから、何かが明らかに起きています。
感謝と最高の願いを込めて
イヴァン