Ошибка при запуске приложения cowboy

У меня проблемы с запуском ковбойского приложения, оно выдает следующую ошибку. По какой-то причине ранчо не запускается, хотя я добавил в свое приложение код для запуска ранчо.

Я вижу, как вытаскивают новый git repo cowlib. но все еще возникают проблемы.

1> application:start(satomi).
{error,
    {bad_return,
        {{satomi_app,start,[normal,[]]},
         {'EXIT',
             {noproc,
                 {gen_server,call,
                     [ranch_sup,
                      {start_child,
                          {{ranch_listener_sup,http},
                           {ranch_listener_sup,start_link,
                               [http,100,ranch_tcp,
                                [{port,9090}],
                                cowboy_protocol,
                                [{...}]]},
                           permanent,5000,supervisor,
                           [ranch_listener_sup]}},
                      infinity]}}}}}}

=INFO REPORT==== 12-Sep-2013::11:42:46 ===
    application: satomi
    exited: {bad_return,
             {{satomi_app,start,[normal,[]]},
              {'EXIT',
               {noproc,
                {gen_server,call,
                 [ranch_sup,
                  {start_child,
                   {{ranch_listener_sup,http},
                    {ranch_listener_sup,start_link,
                     [http,100,ranch_tcp,
                      [{port,9090}],
                      cowboy_protocol,
                      [{env,
                        [{dispatch,
                          [{'_',[],[{[],[],toppage_handler,[]}]}]}]}]]},
                    permanent,5000,supervisor,
                    [ranch_listener_sup]}},
                  infinity]}}}}}
    type: temporary

Ниже мой app.src

>cat satomi.app.src
    {application, satomi,
     [
      {description, ""},
      {vsn, "1"},
      {registered, []},
      {applications, [
                      kernel,
                      stdlib,
        cowboy
                     ]},
      {mod, { satomi_app, []}},
      {env, []}
     ]}.

>cat satomi.erl
-module(satomi).

-export([start/0]).

start()->
    ok = application:start(crypto),
    ok = application:start(sasl),
    ok = application:start(ranch),
    ok = application:start(cowlib),
    ok = application:start(cowboy),
    ok = application:start(satomi).

Я пытаюсь понять, что здесь не так

Может ли кто-нибудь указать мне на рабочий образец ковбоя, который я могу использовать в качестве шаблона. Я использую арматуру для компиляции кода. Я не думаю, что это должно иметь значение. Я использую следующую команду для запуска приложения

erl -pa ./ebin ./deps/*/ebin


person presci    schedule 12.09.2013    source источник
comment
Вам нужно вызвать satomi:start() в оболочке, чтобы запустить все приложения. application:start(satomi) не будет вызывать код в модуле satomi.   -  person johlo    schedule 12.09.2013
comment
Спасибо, я понял, как вы говорили. Еще раз спасибо   -  person presci    schedule 12.09.2013
comment
@johlo Можешь сформулировать это как ответ?   -  person Roberto Aloi    schedule 16.09.2013
comment
@RobertoAloi Добавлен в качестве ответа и расширен.   -  person johlo    schedule 16.09.2013


Ответы (1)


При вызове application:start(satomi) из оболочки автоматически не запускаются приложения, от которых он зависит, их нужно запускать вручную. Имеющаяся у вас функция satomi:start/0 делает именно это, поэтому решение состоит в том, чтобы вызвать satomi:start() из оболочки.

Причина в том, что application:start(satomi) на самом деле не будет вызывать satomi:start(), это удобный метод для запуска приложения и его зависимостей, когда приложение не является частью выпуска Erlang.

ОБНОВЛЕНИЕ: Начиная с Erlang R16B02, существует также application: sure_all_started. Он автоматически запускает все зависимости.

person johlo    schedule 16.09.2013