Как запустить приложение 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