带有cowboy 2.0.0的Erlang简单版本不起作用

带有cowboy 2.0.0的Erlang简单版本不起作用,erlang,cowboy,rebar3,Erlang,Cowboy,Rebar3,我使用的是Erlang/OTP20.0和rebar3。当我启动使用cowboy 2.0.0的新版本时,该版本无法启动 以下是我构建项目的步骤。怎么了 创建发布项目 $ rebar3 new release cowboy2 添加牛仔套装 {deps, [{cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.0.0"}}}]}. 添加一个基本的调度器 start(_StartType, _StartArgs) -

我使用的是Erlang/OTP20.0和rebar3。当我启动使用cowboy 2.0.0的新版本时,该版本无法启动

以下是我构建项目的步骤。怎么了

  • 创建发布项目

    $ rebar3 new release cowboy2
    
  • 添加牛仔套装

    {deps, [{cowboy, {git, "https://github.com/ninenines/cowboy.git", {tag, "2.0.0"}}}]}.
    
  • 添加一个基本的调度器

    start(_StartType, _StartArgs) ->
        Dispatch = cowboy_router:compile([
                {'_', [
                    {"/", toppage_handler, []}
                ]}
            ]),
        {ok, _} = cowboy:start_clear(http, [{port, 8080}], #{
            env => #{dispatch => Dispatch}
        }),
        cowboy2_sup:start_link().
    
  • 添加处理程序。在本例中,我使用()

  • 编译和发布

    $ rebar3 compile && rebar3 release
    
  • 运行应用程序

    $ ./_build/default/rel/cowboy2/bin/cowboy2-0.1.0 console
    
  • 输出
    正如@maze le指出的,问题在于cowboy应用程序没有启动。解决方案是将牛仔添加到文件
    apps/cowboy2/src/cowboy2.app.src
    ,该文件也是由命令
    $rebar3 new release cowboy2
    生成的。为了完整起见,我添加了这个文件

    apps/cowboy2/src/cowboy2.app.src
    我不完全确定《牛仔2》的情况如何,但在《牛仔1》中,为了使用牛仔例程、路由器、调度程序等,您必须在主进程内手动启动牛仔应用程序。我刚才举了一个牛仔的小例子来提醒我类似的事情。这基本上没有记录在案。看一看,这就是错误的原因。我没有将牛仔应用程序放在cowboy2.app.src中。
    $ ./_build/default/rel/cowboy2/bin/cowboy2-0.1.0 console
    Exec: /home/deimos/.asdf/installs/erlang/20.0/lib/erlang/erts-9.0/bin/erlexec 
    -boot /home/deimos/Dev/personal/cowboy2/_build/default/rel/cowboy2/releases/0.1.0/cowboy2
    -mode embedded -boot_var ERTS_LIB_DIR /home/deimos/.asdf/installs/erlang/20.0/lib/erlang/lib 
    -config /home/deimos/Dev/personal/cowboy2/_build/default/rel/cowboy2/releases/0.1.0/sys.config 
    -args_file /home/deimos/Dev/personal/cowboy2/_build/default/rel/cowboy2/releases/0.1.0/vm.args 
    -pa -- console
    
    Root: /home/deimos/Dev/personal/cowboy2/_build/default/rel/cowboy2
    /home/deimos/Dev/personal/cowboy2/_build/default/rel/cowboy2
    Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:30] [hipe] [kernel-poll:true]
    
    
    =INFO REPORT==== 11-Oct-2017::21:00:52 ===
        application: cowboy2
        exited: {bad_return,
                    {{cowboy2_app,start,[normal,[]]},
                     {'EXIT',
                         {undef,
                             [{cowboy_router,compile,
                                  [[{'_',[{"/",toppage_handler,[]}]}]],
                                  []},
                              {cowboy2_app,start,2,
                                      [{file,
                                       "/home/deimos/Dev/personal/cowboy2/_build/default/lib/cowboy2/src/cowboy2_app.erl"},
                                       {line,18}]},
                              {application_master,start_it_old,4,
                                  [{file,"application_master.erl"},
                                   {line,273}]}]}}}}
        type: permanent
        (...)
        Kernel pid terminated (application_controller)
         ({application_start_failure,cowboy2,{bad_return,{{cowboy2_app,start,[normal,[]]},{'EXIT',{undef,[{cowboy_router,compile,[[{'_',[{"/",toppage_handler,[]}]
    
    Crash dump is being written to: erl_crash.dump...done
    
    {application, cowboy2,
     [{description, "An OTP application"},
      {vsn, "0.1.0"},
      {registered, []},
      {mod, { cowboy2_app, []}},
      {applications,
       [kernel,
        stdlib,
        cowboy
       ]},
      {env,[]},
      {modules, []},
    
      {maintainers, []},
      {licenses, ["Apache 2.0"]},
      {links, []}
     ]}.