Получение ответа 500 с помощью приложения Erlang Cowboy

У меня возникли проблемы с расшифровкой этого сообщения об ошибке, которое я получаю при переходе на простую конечную точку, созданную с помощью Cowboy. Я создал простое приложение с помощью cowboy (https://github.com/overture8/cow_app), а затем запустил приложение, использующее rebar3 shell (не уверен, что это правильно?). Во всяком случае, я получаю эту ошибку при попадании в конечную точку:

    Error in process <0.232.0> with exit value:
    {[{reason,undef},
      {mfa,{hello_handler,init,3}},
      {stacktrace,
          [{hello_handler,init,
               [{tcp,http},
                {http_req,#Port<0.7138>,ranch_tcp,keepalive,<0.232.0>,<<"GET">>,
                    'HTTP/1.1',
                    {{127,0,0,1},49651},
                    <<"127.0.0.1">>,undefined,8010,<<"/">>,undefined,<<>>,
                    undefined,[],
                    [{<<"host">>,<<"127.0.0.1:8010">>},
                     {<<"connection">>,<<"keep-alive">>},
                     {<<"cache-control">>,<<"max-age=0">>},
                     {<<"upgrade-insecure-requests">>,<<"1">>},
                     {<<"user-agent">>,
                      <<"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36">>},
                     {<<"accept">>,
                      <<"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8">>},
                     {<<"dnt">>,<<"1">>},
                     {<<"accept-encoding">>,<<"gzip, deflate, sdch">>},
                     {<<"accept-language">>,
                      <<"en-GB,en;q=0.8,en-US;q=0.6,fr;q=0.4">>}],
                    [{<<"connection">>,[<<"keep-alive">>]}],
                    undefined,[],waiting,<<>>,undefined,false,waiting,[],<<>>,
                    undefined},
                []],
               []},
                .
                .
                .

Возможно, я просто делаю что-то совсем не так — это мой первый опыт использования Erlang.

Любая помощь будет принята с благодарностью.


person overture8    schedule 07.09.2016    source источник
comment
Забыл упомянуть - я использую Mac и установил Erlang с помощью brew install erlang. Я установил версию Erlang/OTP 19 [erts-8.0.2].   -  person overture8    schedule 07.09.2016


Ответы (1)


Ваш rebar.lock не синхронизирован с rebar.config и указывает на версию 1.0.1 cowboy, которая требует экспорта init/3, а не init/2, что и означает ошибка ... {reason,undef}, {mfa,{hello_handler,init,3}}, ....

Чтобы исправить, запустите rebar3 upgrade cowboy, а затем запустите rebar3 shell. После того, как я запустил это, приложение отлично работает для меня:

$ curl -i http://localhost:8010/
HTTP/1.1 200 OK
server: Cowboy
date: Wed, 07 Sep 2016 09:57:22 GMT
content-length: 13
content-type: text/plain

Hello Erlang!
person Dogbert    schedule 07.09.2016
comment
Большое спасибо, что посмотрели это! Работает в настоящее время. - person overture8; 07.09.2016