内核pid终止应用程序启动失败,bad_return

时间:2017-09-29 15:53:03

标签: erlang gnu-make cowboy

我写了一个牛仔项目,我在{@ 1}}的localhost上开始。

当我gmake run进行全新安装时,会发生以下错误:

make run

我看到tunnel_app的回复不好

这是我的tunnel_app.erl

~/tunnel# make run
erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[1]: Entering directory `/root/tunnel/deps/cowboy'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[2]: Entering directory `/root/tunnel/deps/cowlib'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[2]: Leaving directory `/root/tunnel/deps/cowlib'
make[2]: Entering directory `/root/tunnel/deps/ranch'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
make[2]: Leaving directory `/root/tunnel/deps/ranch'
../../erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 GEN    rebar.config
make[1]: Leaving directory `/root/tunnel/deps/cowboy'
make[1]: Entering directory `/root/tunnel/deps/jiffy'
./rebar compile
==> jiffy (compile)
make[1]: Leaving directory `/root/tunnel/deps/jiffy'
 DEPEND tunnel.d
erlang.mk:24: Please upgrade to GNU Make 4 or later: https://erlang.mk/guide/installation.html
 ERLC   tunnel_app.erl
 APP    tunnel
===> Starting relx build process ...
===> Resolving OTP Applications from directories:
          /root/tunnel/ebin
          /root/tunnel/deps
          /usr/local/lib/erlang/lib
          /root/tunnel/apps
          /root/tunnel/_rel
===> Resolved tunnel_release-1
===> Including Erts from /usr/local/lib/erlang
===> release successfully created!
===> tarball /root/tunnel/_rel/tunnel_release/tunnel_release-1.tar.gz successfully created!
Exec: /root/tunnel/_rel/tunnel_release/erts-9.0/bin/erlexec -boot /root/tunnel/_rel/tunnel_release/releases/1/tunnel_release -mode embedded -boot_var ERTS_LIB_DIR /root/tunnel/_rel/tunnel_release/erts-9.0/../lib -config /root/tunnel/_rel/tunnel_release/releases/1/sys.config -args_file /root/tunnel/_rel/tunnel_release/releases/1/vm.args -- console
Root: /root/tunnel/_rel/tunnel_release
/root/tunnel/_rel/tunnel_release
heart_beat_kill_pid = 16083
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [kernel-poll:false]


=INFO REPORT==== 29-Sep-2017::11:46:35 ===
    application: tunnel
    exited: {bad_return,
             {{tunnel_app,start,[normal,[]]},
              {'EXIT',
               {undef,
                [{cowboy,start_clear,
                  [my_http_listener,100,
                   [{port,8080}],
                   #{env =>
                      #{dispatch =>
                         [{'_',[],
                           [{[<<"info">>],[],lobby_handler,[]},
                            {[<<"join">>,name],[],join_handler,[]},
                            {[<<"player">>,<<"status">>,name],
                             [],player_status_handler,[]},
                            {[<<"tables">>,<<"info">>,table_id],
                             [],table_info_handler,[]},
                            {[<<"tables">>,<<"play">>,table_id,name,auth,
                              action,x,y],
                             [],table_play_handler,[]},
                            {[<<"assets">>,'...'],
                             [],cowboy_static,
                             {dir,"/root/tunnel/static/assets/"}}]}]}}],
                  []},
                 {tunnel_app,start,2,[{file,"src/tunnel_app.erl"},{line,17}]},
                 {application_master,start_it_old,4,
                  [{file,"application_master.erl"},{line,273}]}]}}}}
    type: permanent
{"Kernel pid terminated",application_controller,"{application_start_failure,tunnel,{bad_return,{{tunnel_app,start,[normal,[]]},{'EXIT',{undef,[{cowboy,start_clear,[my_http_listener,100,[{port,8080}],#{env => #{dispatch => [{'_',[],[{[<<\"info\">>],[],lobby_handler,[]},{[<<\"join\">>,name],[],join_handler,[]},{[<<\"player\">>,<<\"status\">>,name],[],player_status_handler,[]},{[<<\"tables\">>,<<\"info\">>,table_id],[],table_info_handler,[]},{[<<\"tables\">>,<<\"play\">>,table_id,name,auth,action,x,y],[],table_play_handler,[]},{[<<\"assets\">>,'...'],[],cowboy_static,{dir,\"/root/tunnel/static/assets/\"}}]}]}}],[]},{tunnel_app,start,2,[{file,\"src/tunnel_app.erl\"},{line,17}]},{application_master,start_it_old,4,[{file,\"application_master.erl\"},{line,273}]}]}}}}}"}
Kernel pid terminated (application_controller) ({application_start_failure,tunnel,{bad_return,{{tunnel_app,start,[normal,[]]},{'EXIT',{undef,[{cowboy,start_clear,[my_http_listener,100,[{port,8080}],#{
heart: Fri Sep 29 11:46:36 2017: Erlang is crashing .. (waiting for crash dump file)
heart: Fri Sep 29 11:46:36 2017: Would reboot. Terminating.
make: *** [run] Error 1

以及-module(tunnel_app). -behaviour(application). -export([start/2]). -export([stop/1]). start(_Type, _Args) -> Dispatch = cowboy_router:compile([ {'_', [ {"/info", lobby_handler, []}, {"/join/:name", join_handler, []}, {"/player/status/:name", player_status_handler, []}, {"/tables/info/:table_id", table_info_handler, []}, {"/tables/play/:table_id/:name/:auth/:action/:x/:y", table_play_handler, []}, {"/assets/[...]", cowboy_static, {dir, "/users/quantum/tunnel/static/assets/"}} ]}]), {ok, _} = cowboy:start_clear(my_http_listener, 100, [{port, 8080}], #{env => #{dispatch => Dispatch}}), {ok, MainDoor} = door:go(), register(main_door, MainDoor), {ok, MainRoom} = room:go(), register(main_room, MainRoom), tunnel_sup:start_link(). stop(_State) -> ok. 调用的tunnel_sup.erl

start_link

我检查了我的.gitignore

-module(tunnel_sup).
-behaviour(supervisor).

-export([start_link/0]).
-export([init/1]).

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init([]) ->
    Procs = [],
    {ok, {{one_for_one, 1, 5}, Procs}}.

完整存储库位于:https://github.com/quantumproductions/tunnel

我可以在我的机器上复制一个文件夹,但它确实有效。当我将它上传到github并下载时,make run failed。

.erlang.mk/
*.beam
src/*.beam
_rel/
deps/
ebin/

第二个失败了:

~/tunnel3/ls
Makefile    deps        erlang.mk   rel     src     tunnel.d
_rel        ebin        oldh        relx.config static

~/tdep/ls
Makefile    deps        erlang.mk   rel     src     tunnel.d
_rel        ebin        oldh        relx.config static

第一个文件夹工作正常

~/tdep/gmake run
Error: No Makefile to build dependency /Users/quantum/tdep/deps/cowboy.
gmake: *** [erlang.mk:4182: deps] Error 2

可能导致此问题的配置是什么?

编辑:

Juanjo Martin的回答在我的克隆文件夹中有效。

在我的原始文件夹中,它没有,删除100参数会让我得到以下内容。

为什么这不适用于1个特定文件夹?我需要检查/制作什么样的环境来防止这种情况发生?好像/tunnel3/gmake run gmake[1]: Entering directory '/Users/quantum/tunnel3/deps/cowboy' gmake[2]: Entering directory '/Users/quantum/tunnel3/deps/cowlib' gmake[2]: Leaving directory '/Users/quantum/tunnel3/deps/cowlib' gmake[2]: Entering directory '/Users/quantum/tunnel3/deps/ranch' gmake[2]: Leaving directory '/Users/quantum/tunnel3/deps/ranch' GEN rebar.config gmake[1]: Leaving directory '/Users/quantum/tunnel3/deps/cowboy' gmake[1]: Entering directory '/Users/quantum/tunnel3/deps/jiffy' CC=gcc ./enc compile gmake -f c_src/Makefile.erlang.mk gmake[2]: Entering directory '/Users/quantum/tunnel3/deps/jiffy' gmake[2]: Nothing to be done for 'all'. gmake[2]: Leaving directory '/Users/quantum/tunnel3/deps/jiffy' gmake[1]: Leaving directory '/Users/quantum/tunnel3/deps/jiffy' ===> Starting relx build process ... ===> Resolving OTP Applications from directories: /Users/quantum/tunnel3/ebin /Users/quantum/tunnel3/deps /usr/local/Cellar/erlang/19.2/lib/erlang/lib /Users/quantum/tunnel3/apps /Users/quantum/tunnel3/_rel 正在运行不同版本的牛仔?

~/tunnel

啊哈。我从@lastcanal做了评论的指示并且它有效。感谢。

1 个答案:

答案 0 :(得分:0)

我看到的第一件事是你没有.app文件

您可以在why-is-my-cowboy-server-not-running

中查看类似的问题
flag

在tunnel_app.erl模块中,你调用的是cowboy:start_clear,其arity为4,但此函数的arity为3.这就是undef错误的原因:

exited: {bad_return, {{tunnel_app,start,[normal,[]]}, {'EXIT', {undef, [{cowboy,start_clear, [my_http_listener,100, [{port,8080}],

...您应该删除参数“100”

这一定是来自牛仔的早期版本,可能是