Запуск релиза приложения Phoenix со сбоями exrm

Я пытаюсь создать выпуск акций Phoenix приложение (на основе эликсира и эрланга) с использованием exrm,

Первый релиз для dev смешанная среда создается нормально, но вылетает при запуске с использованием ./rel/my_app/bin/my_app console, Это происходит под управлением Ubuntu 14.04 внутри виртуальной машины Vagrant/Virtual Box.

На моем Mac такая же настройка работает нормально. К сожалению, мне нужно собрать релиз на машине с той же архитектурой, что и на целевом сервере, на котором будет работать Ubuntu.

Вы можете найти приложение здесь: https://github.com/mavenastic/my_app. Он включает шаги, предпринятые для установки зависимостей и создания проекта на виртуальной машине (см. STEPS.md) а также аварийный дамп Эрланга.

Вот ошибка, которую я получаю при попытке запустить консоль:

{"Kernel pid terminated",application_controller,"{application_start_failure,my_app,{{shutdown,{failed_to_start_child,'Elixir.MyApp.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.CodeReloader.Server',{undef,[{'Elixir.Mix.Project',config,[],[]},{'Elixir.Phoenix.CodeReloader.Server',init,1,[{file,\"lib/phoenix/code_reloader/server.ex\"},{line,29}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,240}]}]}}}}},{'Elixir.MyApp',start,[normal,[]]}}}"}

РЕДАКТИРОВАТЬ:

Я попытался создать релиз для производственной среды, а также MIX_ENV=prod mix release, Релиз успешно сгенерирован и MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app console работает нормально. Однако я не могу ни пропинговать сервер, ни запустить удаленную консоль, как только она запускается, так что кажется, что-то все еще не хватает для правильной работы приложения.

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app start
$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app ping

=INFO REPORT==== 24-Oct-2015::10:28:25 ===
Protocol: "inet_tcp": register/listen error: econnrefused
escript: exception error: no match of right hand side value
                 {error,
                     {{shutdown,
                          {failed_to_start_child,net_kernel,
                              {'EXIT',nodistribution}}},
                      {child,undefined,net_sup_dynamic,
                          {erl_distribution,start_link,
                              [['my_app_maint_2551@127.0.0.1',longnames]]},
                          permanent,1000,supervisor,
                          [erl_distribution]}}}

$ ps aux | grep my_app
vagrant   2572  0.0  0.0   7532    96 ?        S    10:28   0:00 /vagrant/my_app/rel/my_app/erts-7.1/bin/epmd -daemon
vagrant   2575  0.0  0.2   9448  2256 pts/0    S+   10:28   0:00 grep --color=auto my_app

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app remote_console
$

Кроме того, из того, что я собрал, я должен быть в состоянии создать релиз для dev или любая другая среда. Таким образом, недостающий фрагмент может повлиять на обе среды.

Заранее спасибо!

4 ответа

Решение

За предложение @bitwalker, используя master филиал exrm исправил проблему.

Мне кажется, проблема в том, что вы создаете релиз в своем dev среда (вместо prod окр).

Эта часть:

{undef,[{'Elixir.Mix.Project',config,[],[]}

сообщения об ошибке (ужасно и ужасно а-ля Erlang) в основном говорит, что Mix.Project.config/0 не определено Микс не включен в релизы, но я предполагаю, что Phoenix использует его в своем загрузчике кода, который вы обычно не запускаете в производстве.

Попробуйте сгенерировать релиз с MIX_ENV=prod и посмотреть, если это работает.

@bitwalker правильно, в вашем config/prod.exs файл, который вы должны добавить server: true а-ля http://www.phoenixframework.org/v0.13.1/docs/advanced-deployment.

Я клонировал ваш проект и сгенерировал dev отпусти и получаю ту же ошибку, что и ты. Я получил этот же сбой во многих моих личных проектах с dev строить. Тем не менее prod сборка всегда еще работает.

Таким образом, после введения в config/prod.secret.exs с правильной информацией и добавлением server: true к моему config/prod.exs файл, я могу сгенерировать релиз prod и выполнить console, start а также ping успешно. Я подозреваю, что перегруженный код может быть виновником dev построить, но не иметь никаких доказательств, исключая его присутствие в ошибке и определенно что-то другое о dev против prod,

Кстати, при запуске приложения вам нужно только указать PORTне MIX_ENV так как это релиз и микс не в игре:

PORT=4000 bin/my_app start

Мой совет, чтобы пропустить dev построить и просто использовать staging а также prod строить. Если у вас нет staging сервер, вы можете развернуть staging выпустить на локальный компьютер а-ля https://exrm.readme.io/docs/deployment.

Я поместил это в трекер, но и для потомков:

Вам нужно добавить server: true на ваш prod.exs под конфигом для MyApp.Endpoint, Вот как Феникс начинает себя в релизе.

С Фениксом я бы рекомендовал всегда использовать MIX_ENV=prod для релизов, MIX_ENV=dev имеет множество специфических для разработки функций (таких как перезагрузка кода), которые либо не будут работать в рамках релиза, либо не будут работать так, как ожидалось.

Если вы получаете ошибки конфигурации, это может быть связано с тем, что вам не хватает необходимой конфигурации Phoenix в вашем файле для конкретной среды. Вы можете проверить это, запустив MIX_ENV=prod mix compile чтобы увидеть, если он успешно компилируется. Вы также можете создать свой релиз с --verbosity=verbose получить подробный вывод для отслеживания проблем.

Причина, по которой вы не можете пропинговать или утешить релиз, заключается в том, что он не запустился при запуске.

Другие вопросы по тегам