Консоль Elixir exrm работает, но приложение не запускается автоматически

Я задал вопрос ранее о получении exrm работает для моего проекта. Ответ привел меня к тому, что я могу собрать свой релиз (в режиме разработки) и получить к нему доступ через консоль.

Однако есть пара проблем:

  1. Когда я открываю консоль через rel/my_app/bin/my_app console, мое приложение фактически не запускается. Я должен позвонить Application.start(:my_app), чтобы начать.

  2. Вызов rel/my_app/bin/my_app start не запускает мое приложение. Я вижу, что процессы epmd, beam.smp и run_erl запущены, но мое собственное приложение не работает.

Почти уверен, что эти две проблемы связаны.

Действия, предпринятые для консоли:

$ mix release --dev
$ ./rel/my_app/bin/my_app console
iex([email protected])1> Application.start(:my_app)
# at this point the app is running until I ctrl+c

Шаги, предпринятые для запуска:

$ mix release --dev
$ ./rel/my_app/bin/my_app start

$ ps aux | grep "my_app"

12235   0.0  0.0  2460212    636   ??  S    11:10am   0:00.19 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/epmd -daemon

17565   0.0  0.2  2524256  26236 s008  Ss+   4:03pm   0:00.37 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/beam.smp -- -root /Users/me/code/my_app/rel/my_app -progname Users/me/code/my_app/rel/my_app/bin/my_app -- -home /Users/me -- -boot /Users/me/code/my_app/rel/my_app/releases/0.0.1/my_app -boot_var ERTS_LIB_DIR /Users/me/code/my_app/rel/my_app/erts-6.3.1/../lib -config /Users/me/code/my_app/rel/my_app/releases/0.0.1/sys.config -pa /Users/me/code/my_app/rel/my_app/lib/consolidated -name [email protected] -setcookie my_app -user Elixir.IEx.CLI -extra --no-halt +iex -- console

17562   0.0  0.0  2452008    588   ??  S     4:03pm   0:00.00 /Users/me/code/my_app/rel/my_app/erts-6.3.1/bin/run_erl -daemon /Users/me/code/my_app/rel/my_app/tmp/erl_pipes/my_app/ /Users/me/code/my_app/rel/my_app/log exec "/Users/me/code/my_app/rel/my_app/bin/my_app" "console"

$ tail /var/log/system.log

Jun  9 16:03:14 me.local my_app[17565][17597]: Starting up

Я могу сказать, что мое приложение не работает, потому что оно должно потреблять из очереди и записывать в хранилище данных. Однако при запуске выпуска очередь никогда не используется. К сожалению, я не могу найти больше выходных данных журнала или ошибок, кроме одной строки «Запуск».

Есть ли аргумент, который мне нужно передать команде запуска exrm, чтобы запустить мое приложение?

Если нет, возможно, есть способ отладить это, указав куда-нибудь журналы или проверив внутренние процессы?


person Mikel    schedule 11.06.2015    source источник


Ответы (2)


Глядя на свой ранее размещенный mix.exs, вам нужно добавить свое собственное приложение в applications. Это сообщает виртуальной машине, какие приложения следует запускать во время выполнения. Некоторые приложения запускаются из коробки (такие как :kernel, :stdlib и т.д.), и вам не нужно их добавлять, но все, что вы хотели запускать автоматически, должно идти в applications. В included_applications можно положить приложения, которые не нужно запускать, так как они загружаются, но не запускаются.

person bitwalker    schedule 11.06.2015
comment
помещение :my_app в список applications приводит к бесконечному циклу как в iex -S mix, так и в mix release. Я предполагаю, что мне следует создать отдельное приложение в my_app, которое выполняет реальную работу, а затем добавить его в список applications? Например. :my_app_worker - person Mikel; 11.06.2015
comment
Я ошибся, поместив :my_app в applications, на самом деле это не требуется. У вас есть ссылка на исходный код этого проекта, которой вы можете поделиться? Что-то пошло не так, но трудно устранить неполадки только с помощью mix.exs. - person bitwalker; 12.06.2015

Вам нужно определить свое приложение в mix.exs, чтобы оно запускалось автоматически:

def application do
  [applications: [],
   mod: {MyAppModule, []}]
end

Итак, mod: {MyAppModule, []} означает, что MyAppModule.start_link() будет вызываться автоматически.

person BurmajaM    schedule 12.07.2015