凤凰框架部署问题

phoenix framework deployment issue

我正在尝试使用 exrm 和 conform 部署 Phoenix 应用程序。在本地 Ubuntu 测试版本有效。但是当我 运行 在服务器上相同时,就会出现故障。我无法理解确切原因。

{error_logger,{{2016,1,30},{7,45,44}},"Protocol: ~tp: register/listen error: ~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>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6,[{文件,"gen_server.erl"},{行,344}]},{proc_lib,init_p_do_apply,3,[{文件, "proc_lib.erl"},{line,240}]}]}},{祖先,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{ links,[#Port<0.380>,<0.19.0>]},{dictionary,[{longnames,true}]},{trap_exit,true},{status,运行ning}, {heap_size,987},{stack_size,27},{减少,842}],[]]} {error_logger,{{2016,1,30},{7,45,44}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{id,net_kernel},{mfargs,{net_kernel, start_link,[['app@127.0.0.1',longnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]} {error_logger,{{2016,1,30},{7,45,44}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,{shutdown,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}},{offender,[{pid,undefined},{id ,net_sup},{mfargs,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,导师}]}]} {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>},{registered_name,[]},{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>]},{dictionary,[]},{trap_exit,true},{status,运行ning},{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,{关机,{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]} }},{类型,永久}]} {"Kernel pid terminated",application_controller,"{application_start_failure,内核,{{关机,{failed_to_start_child,net_sup,{关机,{failed_to_start_child, net_kernel,{'EXIT',nodistribution}}}}},{kernel,start,[normal,[]]}}}"}

正在将故障转储写入:erl_crash.dump...内核 pid 已终止 (application_controller) ({application_start_failure,kernel,{{shutdown,{failed_to_start_child ,net_sup,{关机,{failed_to_start_child,net_kernel,{'EXIT',不分配}}}}},{k

错误原因通常在error和crashdump的第一行:

{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。 比较您的 devprod 设置。可能定义了不同的端口。在 iex 环境下尝试 运行 您的应用。

MIX_ENV=prod iex -S mix phoenix.server

请记住,生成的版本具有在创建期间评估和硬编码的所有配置值。