运行使用relx生成的erlang版本时出现启动错误

运行使用relx生成的erlang版本时出现启动错误,erlang,relx,Erlang,Relx,我熟悉使用钢筋构建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/relea

我熟悉使用钢筋构建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中列出iNet(和其他应用程序)。没有效果

从relx日志中,它似乎知道我的erlanglibs(在/usr/local/lib/erlang/lib中)

有人能帮我找出我遗漏了什么,以及我如何使上述版本生效吗

更新:上面的ERL_LIBS目录未创建。同时,我指定的应用程序都在myrel/lib/中。所以很明显有什么事发生了

致以感谢和良好的祝愿


Ivan

我在R15B03上也有同样的问题,relx 0.6.0

我注意到
prim_inet
放在
/path/to/erlang/lib/erts-[vsn]
中(它没有应用程序资源文件,因此不能指定为依赖项),但relx包含
/path/to/erlang/erts-[vsn]


似乎是一个bug,我们应该在relx问题跟踪器上报告它。

prim_inet
是未包含的
erts
库的一部分。另外,我可以简单地复制它。看起来relx无法包含
erts
库,即使我将其指定为依赖项,relx表示系统无法访问它。谢谢!好线索。注意:relx文档表示默认情况下包含erts。我来看看我能做些什么。是的,
/usr/local/lib/erlang/erts-[vsn]
中的
erts
为我提供了,但是
prim\u inet
放在了
/usr/local/lib/erlang/lib/erts-[vsn]
是的,我看到了。我们可能就快找到答案了。我发现了一种不常用的方法,可以包含
lib/erts-[vsn]
。您可以像这样使用配置:
{overlay,[{copy,source,destination}}
{overlay,[{copy,“/path/to/erlang/lib/erts-[vsn]”,“{{output_dir}}/lib/erts-[vsn]}.