使用erl -pa运行已编译的rebar 3 erlang应用程序的问题

wlzqhblo  于 2023-09-28  发布在  Erlang
关注(0)|答案(1)|浏览(149)

依赖于cowboy的erlang OTP应用程序(nerlnetApp)在使用以下命令执行时编译并成功运行:rebar3 shell,从应用程序目录。
但是,erlang shell不能在CI环境中运行,因此我们决定使用以下方法运行它:

erl -pa jsx/ebin ranch/ebin cowlib/ebin cowboy/ebin nerlnetApp/ebin -eval "nerlnetApp_app:start(a,b)."

此命令将生成以下错误:

{"init terminating in do_boot",
{noproc,{gen_server,call,[ranch_sup,{start_child,{{ranch_listener_sup,nerlnetInitiator},
{ranch_listener_sup,start_link,[nerlnetInitiator,ranch_tcp,#{connection_type=>supervisor,socket_opts=>[{port,8484}]},cowboy_clear,#{connection_type=>supervisor,env=>#{dispatch=>[{'_',[],[{[<<"updateJsonPath">>],[],jsonHandler,[<0.9.0>]},{[<<"isNerlnetDevice">>],[],iotHandler,[<0.9.0>]}]}]}}]},permanent,infinity,supervisor,[ranch_listener_sup]}},infinity]}}}

链接到init_cowboy_start_clear失败的nerlnetInitiator。
使用rebar.config文件链接到application directory

c7rzv4ha

c7rzv4ha1#

函数nerlnetApp_app:start/2application行为的回调函数--它不能被直接调用。试试这个:

-eval "application:ensure_all_started(nerlnetApp, permanent)."

这将在启动应用程序本身之前启动所有依赖项,包括ranch。这应该可以避免noproc错误,这意味着没有名为ranch_sup的进程正在运行。

相关问题