凤凰框架部署问题
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
。
比较您的 dev
和 prod
设置。可能定义了不同的端口。在 iex
环境下尝试 运行 您的应用。
MIX_ENV=prod iex -S mix phoenix.server
请记住,生成的版本具有在创建期间评估和硬编码的所有配置值。
我正在尝试使用 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
。
比较您的 dev
和 prod
设置。可能定义了不同的端口。在 iex
环境下尝试 运行 您的应用。
MIX_ENV=prod iex -S mix phoenix.server
请记住,生成的版本具有在创建期间评估和硬编码的所有配置值。