Ошибка запуска ковбойского приложения
У меня проблемы с запуском ковбойского приложения, которое выдает мне следующая ошибка. По какой-то причине ранчо не запускается, хотя я добавил код для запуска ранчо в своем приложении.
Я вижу, как вытаскивают новую Git-репо 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
1 ответ
При звонке application:start(satomi)
из оболочки он не запускает автоматически приложения, от которых он зависит, они должны запускаться вручную. satomi:start/0
функция, которая у вас есть, делает именно это, поэтому решение заключается в вызове satomi:start()
из скорлупы
Причина в том, что application:start(satomi)
на самом деле не будет звонить satomi:start()
это удобный метод для запуска приложения и его зависимостей, когда приложение не является частью выпуска Erlang.
ОБНОВЛЕНИЕ: Начиная с Erlang R16B02, также есть приложение:ure_all_started. Он запускает все зависимости автоматически.