Запустить GProc как зависимость

Я пытаюсь запустить gproc как зависимость внутри приложения, но это не удается:

{error,{not_started,gproc}}

Это мой файл app.src, который используется Rebar3 при компиляции:

{application, myapp,
 [{description, "MyApp"},
  {vsn, "0.1.0"},
  {registered, []},
  {mod, { my_app, []}},
  {applications,
   [kernel,
    stdlib,
    sasl,
    gproc    <--- Dependency, and is compiled with Rebar3
   ]},
  {env,[]},
  {modules, []},

  {maintainers, []},
  {licenses, []},
  {links, []}
 ]}.

При запуске из шелла с application:start(gproc). а потом application:start(myapp). все прекрасно работает. Я не понимаю, почему...

Может быть, это из-за каких-то условий гонки?

Оболочка запускается командой:

erl -pa _build/default/lib/*/ebin -boot start_sasl -eval "application:start(myapp)"

Редактировать: При использовании rebar3 shell все работает нормально, в чем отличие от команды оболочки, которую я использую?


person jvdveuten    schedule 20.07.2016    source источник


Ответы (1)


Использовать

application:ensure_all_started(myapp).

Обычный start пытается запустить только запрошенное приложение, только проверяя, что зависимости уже запущены.

Документы:

  • #P4# <блочная цитата> #P5#
  • #P6# <блочная цитата> #P7#
person Nathaniel Waisbrot    schedule 21.07.2016
comment
Спасибо! Трудно найти это в документах. Если кто-то хочет найти это: erlang.org/doc/man/application.html - person jvdveuten; 21.07.2016