代码之家  ›  专栏  ›  技术社区  ›  quantumpotato

内核pid终止应用程序启动失败,返回错误

  •  0
  • quantumpotato  · 技术社区  · 9 年前

    我写了一个牛仔项目,从localhost开始 gmake run

    当我 make run 在新安装时,会发生以下错误:

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

    这是我的tunnel_应用程序。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.
    

    tunnel_sup.erl 它调用 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}}.
    

    我检查了我的。gitignore

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

    https://github.com/quantumproductions/tunnel

    我可以在我的机器上复制一个文件夹,它可以工作。当我将其上传到github并下载时,make run失败。

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

    第一个文件夹工作正常

    /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
    

    什么配置可能导致这种情况?

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

    为什么这在一个特定文件夹中不起作用?我必须检查/制定什么样的环境修复来防止这种情况?看起来像是 ~/tunnel

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

    1 回复  |  直到 9 年前
        1
  •  0
  •   quantumpotato    9 年前

    您可以在中检查类似问题 why-is-my-cowboy-server-not-running

    flag
    

    在tunnel_应用程序中。您正在调用的erl模块cowboy:start\u clear的arity为4,但此函数的arity为3。这就是undef错误的原因:

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

    这可能是《牛仔》的早期版本