2017-09-29 1 views
0

Ich schrieb ein Cowboy-Projekt, das ich auf localhost mit gmake run starte.Kernel pid beendete Anwendung Startfehler, bad_return

Als ich make run auf einer neuen Installation, dieser Fehler passiert:

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

ich schlechte Rückkehr für die tunnel_app sehen

Das ist mein 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, "https://stackoverflow.com/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. 

und die tunnel_sup.erl dass es mit start_link ruft:

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

überprüfte ich meine .gitignore

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

Der vollständige Repository ist hier: https://github.com/quantumproductions/tunnel

Ich bin in der Lage einen Ordner auf meinem Rechner kopieren und es funktioniert. Wenn ich diese Datei auf github hochlade und herunterlade, schlägt make make fail fehl.

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

die zweite nicht:

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

ersten Ordner

/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 

Welche Konfiguration könnte verursacht dies gut funktioniert?

EDIT:

Juanjo Martin Antwort funktioniert, in meinem geklonten Ordner.

In meinem ursprünglichen Ordner ist es nicht, und das Entfernen des 100 Arguments bringt mir die unten.

Warum funktioniert das nicht in 1 bestimmten Ordner? Welche Art von Umgebung muss ich überprüfen/machen, um dies zu verhindern? Es scheint wie ~/tunnel läuft eine andere Version von 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, 
               "https://stackoverflow.com/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,\"https://stackoverflow.com/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. Ich habe die Anweisung von @lastcanal gemacht und es funktioniert. Vielen Dank.

+0

Versuchen Sie 'erlang-mk machen; mach distclean; machen'. Das wird deine erlang.mk-Umgebung wiederherstellen und alles reinigen, bevor du deine Deps und App neu erstellst. – lastcanal

Antwort

0

Das erste, was ich sehe, ist, dass Sie nicht über eine .app-Datei

haben, können Sie in why-is-my-cowboy-server-not-running

flag 

In tunnel_app.erl Modul ein ähnliches Problem überprüfen sind Sie Cowboy Aufruf: start_clear mit ein arity von 4, aber die arity für diese Funktion ist 3. Deshalb ist der undef Fehler:

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

...Sie sollten die Parameter "100"

entfernen Dies aus einer früheren Version von Cowboy gewesen sein muss, möglicherweise

+0

Hallo Juanjo, die Antwort dort sagt "Wenn Sie nicht ein Build-Tool für Ihre App verwenden, werfen Sie einen Blick auf erlang.mk. Es erstellt automatisch eine App-Datei für Sie.". Ich habe erlang.mk - warum sollte das nicht die .app-Datei erstellen? – quantumpotato

+0

Wie Sie in den oberen Zeilen des Fehlers nach "make run" sehen können: erlang.mk:24: Bitte aktualisieren Sie auf GNU Make 4 oder höher ... ". Es ist nur eine Warnung, weil Make 3.81 und 3.82 veraltet sind, aber Sie könnten es upgraden und überprüfen, ob es funktioniert –

+0

Im tunnel_app.erl Modul rufen Sie cowboy: start_clear mit einer Arity von 4, aber die Arity für diese Funktion ist 3. Deshalb ist der undef Fehler: beendet: {bad_return, {{tunnel_app, start, [normal, []]}, { 'EXIT', {undef, [{cowboy, start_clear, [my_http_listener, 100, [{port, 8080}], ... Sie sollten den Parameter "100" entfernen –