проблема с развертыванием феникс фреймворк

Я пытаюсь развернуть приложение Phoenix с помощью exrm и соответствовать. Тестирование релиза на локальной Ubuntu работает. Но когда я запускаю то же самое на сервере, происходит сбой. Я не могу понять точную причину.

{error_logger, {{2016,1,30}, {7,45,44}}, "Протокол: ~ tp: ошибка регистрации / прослушивания: ~ tp ~ n", ["inet_tcp", etimedout]} {error_logger, { {2016,1,30}, {7,45,44}}, crash_report, [[{initial_call, {net_kernel, init, ['Argument__1']}}, {pid, ‹0.22.0>}, {зарегистрированное_имя, []}, {error_info, {exit, {error, badarg}, [{gen_server, init_it, 6, [{file, "gen_server.erl"}, {line, 344}]}, {proc_lib, init_p_do_apply, 3, [{file, "proc_lib.erl"}, {line, 240}]}]}}, {предки, [net_sup, kernel_sup, ‹0.10.0>]}, {messages, []}, {links, [# Порт ‹0.380>,‹ 0.19.0>]}, {dictionary, [{longnames, true}]}, {trap_exit, true}, {status, running}, {heap_size, 987}, {stack_size, 27}, { сокращения, 842}], []]} {error_logger, {{2016,1,30}, {7,45,44}}, supervisor_report, [{supervisor, {local, net_sup}}, {errorContext, start_error}, {причина, {'EXIT', nodistribution}}, {offender, [{pid, undefined}, {id, net_kernel}, {mfargs, {net_kernel, start_link, [['app @ 127.0.0.1', longnames]]} }, {restart_type, постоянный}, {shutdown, 2000}, {child_type, worker}]}]} {error_logger, {{2016,1,30}, {7,45,44}}, supervisor_report, [{superviso r, {local, kernel_sup}}, {errorContext, start_error}, {cause, {shutdown, {failed_to_start_child, net_kernel, {'EXIT', nodistribution}}}}, {offender, [{pid, undefined}, {id, net_sup}, {mfargs, {erl_distribution, start_link, []}}, {restart_type, постоянный}, {shutdown, infinity}, {child_type, supervisor}]}]} {error_logger, {{2016,1,30}, { 7,45,44}}, crash_report, [[{initial_call, {application_master, init, ['Argument__1', 'Argument__2', 'Argument__3', 'Argument__4']}}, {pid, ‹0.9.0>}, {зарегистрированное_имя, []}, {error_info, {exit, {{shutdown, {failed_to_start_child, net_sup, {shutdown, {failed_to_start_child, net_kernel, {'EXIT', nodistribution}}}}}, {kernel, start, [normal, []]}}, [{application_master, init, 4, [{file, "application_master.erl"}, {line, 134}]}, {proc_lib, init_p_do_apply, 3, [{file, "proc_lib.erl"} , {line, 240}]}]}}, {ancestors, [‹0.8.0>]}, {messages, [{'EXIT',‹ 0.10.0>, normal}]}, {links, [‹0.8 .0>, ‹0.7.0>]}, {словарь, []}, {trap_exit, true}, {status, running}, {heap_size, 376}, {stack_size, 27}, {reductions, 117}], []]} {error_logger, {{2016,1,30}, {7,45,44}}, std_info, [{application, kernel}, {exited, {{shutdown, {failed_to_start_child, net_sup, {shutdown, {failed_to_start_child, net_kernel, {'EXIT', nodistribution}}}}}, {kernel, start, [normal, [ ]]}}}, {type, постоянный}]} {"Pid ядра завершен", application_controller, "{application_start_failure, kernel, {{shutdown, {failed_to_start_child, net_sup, {shutdown, {failed_to_start_child, net_kernel, {'EXIT', nodistribution}}}}}, {ядро, начало, [нормальный, []]}}} "}

Дамп сбоя записывается в: erl_crash.dump ... Идентификатор ядра завершен (application_controller) ({application_start_failure, kernel, {{shutdown, {failed_to_start_child, net_sup, {shutdown, {failed_to_start_child, net_kernel, {'EXIT}', nodistribution) }}}, {k


person pra    schedule 30.01.2016    source источник


Ответы (1)


Причина ошибки обычно находится в первой строке ошибки и аварийного дампа:

{error_logger,{{2016,1,30},{7,45,44}},"Protocol: ~tp: register/listen error: ~tp~n",["inet_tcp",etimedout]}...

({application_start_failure,kernel,{{shutdown,{failed_to_start_child,net_sup,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}}...

Во время запуска произошла ошибка при открытии прослушивающего сокета с таймаутом etimedout. Это может быть вызвано несколькими причинами:

  • ваше приложение уже запущено, и вы не можете открыть один и тот же порт дважды,
  • есть ограничения брандмауэра - проверьте iptables, особенно для порта 4369 (демон сопоставления портов Erlang)
  • у вашего приложения нет прав на открытие этого порта

iex запускает ваше приложение с dev средой, а exrm использует prod. Сравните свои dev и prod настройки. Наверное там определены разные порты. Попробуйте запустить приложение с iex, но с prod средой.

MIX_ENV=prod iex -S mix phoenix.server

Помните, что сгенерированный выпуск имеет все значения конфигурации, оцененные во время создания и жестко запрограммированные.

person tkowal    schedule 30.01.2016
comment
Проблема с iptables. Я добавил порт, но не перезапускал iptables - person pra; 30.01.2016
comment
Отличный обстоятельный ответ @tkowal! Престижность! - person Onorio Catenacci; 01.02.2016