Kernel pid terminated application start failure, bad_return

落花浮王杯 提交于 2019-12-25 09:32:04

问题


I wrote a cowboy project that I start on localhost with gmake run.

When I make run on a fresh installation, this error happens:

~/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

I see bad return for the tunnel_app

This is my tunnel_app.erl

-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.

and the tunnel_sup.erl that it calls with start_link:

-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}}.

I checked my .gitignore

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

The full repository is here: https://github.com/quantumproductions/tunnel

I'm able to copy a folder on my machine and it works. When I upload this to github and download it, make run fails.

~/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

the second one fails:

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

first folder works fine

/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

What configuration could be causing this?

EDIT:

Juanjo Martin's answer works, in my cloned folder.

In my original folder, it does not, and removing the 100 argument gets me the below.

Why is this not working in 1 specific folder? What kind of environment fix do I have to check/make to prevent this? It seems like ~/tunnel is running a different version of cowboy?

/tunnel/gmake run
gmake[1]: Entering directory '/Users/quantum/tunnel/deps/cowboy'
gmake[2]: Entering directory '/Users/quantum/tunnel/deps/cowlib'
gmake[2]: Leaving directory '/Users/quantum/tunnel/deps/cowlib'
gmake[2]: Entering directory '/Users/quantum/tunnel/deps/ranch'
gmake[2]: Leaving directory '/Users/quantum/tunnel/deps/ranch'
 GEN    rebar.config
gmake[1]: Leaving directory '/Users/quantum/tunnel/deps/cowboy'
gmake[1]: Entering directory '/Users/quantum/tunnel/deps/jiffy'
CC=gcc ./enc compile
gmake -f c_src/Makefile.erlang.mk
gmake[2]: Entering directory '/Users/quantum/tunnel/deps/jiffy'
gmake[2]: Nothing to be done for 'all'.
gmake[2]: Leaving directory '/Users/quantum/tunnel/deps/jiffy'
gmake[1]: Leaving directory '/Users/quantum/tunnel/deps/jiffy'
 DEPEND tunnel.d
 ERLC   tunnel_app.erl
 APP    tunnel
===> Starting relx build process ...
===> Resolving OTP Applications from directories:
          /Users/quantum/tunnel/ebin
          /Users/quantum/tunnel/deps
          /usr/local/Cellar/erlang/19.2/lib/erlang/lib
          /Users/quantum/tunnel/apps
          /Users/quantum/tunnel/_rel
===> Resolved tunnel_release-1
===> Including Erts from /usr/local/Cellar/erlang/19.2/lib/erlang
===> release successfully created!
===> tarball /Users/quantum/tunnel/_rel/tunnel_release/tunnel_release-1.tar.gz successfully created!
Exec: /Users/quantum/tunnel/_rel/tunnel_release/erts-8.2/bin/erlexec -boot /Users/quantum/tunnel/_rel/tunnel_release/releases/1/tunnel_release -mode embedded -boot_var ERTS_LIB_DIR /Users/quantum/tunnel/_rel/tunnel_release/erts-8.2/../lib -config /Users/quantum/tunnel/_rel/tunnel_release/releases/1/sys.config -args_file /Users/quantum/tunnel/_rel/tunnel_release/releases/1/vm.args -- console
Root: /Users/quantum/tunnel/_rel/tunnel_release
/Users/quantum/tunnel/_rel/tunnel_release
heart_beat_kill_pid = 3135
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]


=INFO REPORT==== 5-Oct-2017::16:54:36 ===
    application: tunnel
    exited: {bad_return,
                {{tunnel_app,start,[normal,[]]},
                 {'EXIT',
                     {undef,
                         [{cowboy,start_clear,
                              [my_http_listener,
                               [{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,
                                              "/users/quantum/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,[{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,\"/users/quantum/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,[{port,8080}],#{env
heart: Thu Oct  5 16:54:37 2017: Erlang is crashing .. (waiting for crash dump file)
heart: Thu Oct  5 16:54:37 2017: Would reboot. Terminating.
gmake: *** [erlang.mk:6450: run] Error 1
~/tunnel/

Aha. I did the comment's instruction from @lastcanal and it works. Thanks.


回答1:


First thing I see is you don't have an .app file

You can check a similar problem in why-is-my-cowboy-server-not-running

flag

In tunnel_app.erl module you're calling cowboy:start_clear with an arity of 4 but the arity for this function is 3. That's why the undef error:

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

... You should remove the parameter "100"

This must have been from an earlier version of Cowboy, possibly



来源:https://stackoverflow.com/questions/46492630/kernel-pid-terminated-application-start-failure-bad-return

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!