Как запустить приложение erlang (rebar build)
Я новичок в мире Erlang и в настоящее время не могу понять, как запустить мое фиктивное приложение erlang. Наверное, я просто что-то упускаю... Итак, я создал приложение с арматурой (rebar create-app appid=dummys).
В настоящее время у меня есть
- арматуру.config
- src / dummys.приложение.src
- src / dummys_app.Эрл!--10-->
- src / dummys_sup.Эрл!--10-->
я обнаружил, что для запуска приложения во время разработка лучше создать дополнительный метод запуска, который должен вызывать приложение: start (module).
Я добавил некоторые основные методы ведения журнала в мои методы запуска..
start() ->
error_logger:info_msg("Starting app(dev)..~n"),
application:start(dummys_app).
start(_StartType, _StartArgs) ->
error_logger:info_msg("Starting app..~n"),
dummys_sup:start_link().
если я попробую
erl -noshell -pa ebin -s application start dummys
erl -noshell -pa ebin -s application start dummys_app
нет выхода..
если я попробую
erl -noshell -pa ebin -s dummys start
erl аварийно завершает работу с ошибкой..
если я попробую
erl -noshell -pa ebin -s dummys_app start
Он выводит только "запуск приложения (dev)..
3 ответов
для быстрой разработки, если вы просто хотите, чтобы ваше приложение может начать, запустите оболочку, а затем запустите приложение:
erl -pa ebin
1> dummys_app:start().
это даст вам четкое представление о том, что неправильно и правильно без бомбардировки снарядов после.
поскольку вы делаете приложение для запуска, а не просто библиотеку для совместного использования, вы захотите сделать выпуск. Арматура может получить вас большую часть пути туда:
mkdir rel
cd rel
rebar create-node nodeid=dummysnode
после того, как вы скомпилировали приложение, вы можно создать выпуск:
rebar generate
это создаст портативный выпуск, который включает в себя все необходимые библиотеки и даже систему выполнения erlang. Это помещается по умолчанию в каталог rel/; в вашем случае rel/dummys.
в этом каталоге будет сценарий управления, который вы можете использовать для запуска, остановки и присоединения к приложению:
rel/dummys/bin/dummys start
rel/dummys/bin/dummys stop
rel/dummys/bin/dummys start
rel/dummys/bin/dummys attach
посмотрите на свой . Значение всех директив объясняется в "приложение" manpage, но я подозреваю, что здесь отсутствует mod
, который указывает имя вашего модуля обратного вызова приложения. Поэтому убедитесь, что эта строка:
{mod, {dummys_app, []}}
пустой список там будет передан как до dummys_app:start/2
.
Чтобы запустить новый модуль вместе с приложением, добавьте его в дерево наблюдения в
dummys_sup:init
. Эта функция должна выглядеть примерно так:
init(_) ->
{ok, {{one_for_one, 10, 10},
[{dummys_cool, {dummys_cool, start_link, []},
permanent, brutal_kill, worker, [dummys_cool]}]}.
это описано в "супервизор" manpage, но в основном это означает, что при запуске, этот руководитель начнет процесс ребенок. dummys_cool:start_link()
будет вызван, и эта функция, как ожидается, породит новый процесс, свяжется с ним и вернет его идентификатор процесса. Если вам нужно больше процессов, просто добавьте больше дочерних спецификаций в список.
erl -noshell -pa ebin -s application start dummys
код выше не будет работать, потому что application:start([dummys])
будет называться.
вы можете взять ссылку на документация Erlang для сведения.
для вашего случая,
erl -noshell -pa ebin -s dummys