Консоль Elixir exrm работает, но приложение не запускается автоматически
Ранее я задавал вопрос о том, как заставить exrm работать на мой проект. Ответ привел меня к тому, что я могу собрать свой релиз (в режиме разработки) и получить к нему доступ через консоль.
Однако есть пара проблем:
Когда я открываю консоль через
rel/my_app/bin/my_app console
мое приложение на самом деле не запускается. Я должен позвонитьApplication.start(:my_app)
чтобы это получилось.призвание
rel/my_app/bin/my_app start
не запускается мое приложение Я вижу, что процессы epmd, beam.smp и run_erl запущены, но мое собственное приложение не работает.
Уверен, что эти две проблемы связаны.
Шаги, принятые для консоли:
$ mix release --dev
$ ./rel/my_app/bin/my_app console
iex(my_app@127.0.0.1)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 my_app@127.0.0.1 -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, чтобы он запустил мое приложение?
Если нет, возможно, есть ли способ отладить это, указав куда-нибудь логи или проверив внутренние процессы?
2 ответа
Глядя на ваши ранее опубликованные mix.exs
необходимо добавить собственное приложение в applications
, Это сообщает виртуальной машине, какие приложения следует запускать во время выполнения. Некоторые приложения запускаются из коробки (например, :kernel
, :stdlib
и т. д.), и вам не нужно добавлять их, но все, что вы хотели запустить автоматически, должно идти в applications
, Вы можете разместить приложения, которые не нужно запускать в included_applications
, так как те загружены, но не запущены.
Вам нужно определить свое приложение в mix.exs, чтобы запустить его автоматически:
def application do
[applications: [],
mod: {MyAppModule, []}]
end
Поэтому mod: {MyAppModule, []} означает, что MyAppModule.start_link() будет вызываться автоматически.