我面临一个问题,希望有人能帮助我。
我尝试通过以下方式开始net_kernel
:
net_kernel:start([test,shortnames]).
但是我遇到了这个错误:
{error,
{{shutdown,
{failed_to_start_child,net_kernel,{'EXIT',nodistribution}}},
{child,undefined,net_sup_dynamic,
{erl_distribution,start_link,[[test,shortnames]]},
permanent,1000,supervisor,
[erl_distribution]}}}
=INFO REPORT==== 23-Apr-2017::21:07:43 ===
Protocol: "inet_tcp": register/listen error: econnrefused
令人惊奇的提示是,当尝试通过以下方式启动
net_kernel
时:erl -sname test
net_kernel
将成功启动另一个令人惊奇的技巧是,在操作系统引导并退出erl shell之后至少启动一次
net_kernel
之后,第一种启动net_kernel
的方法将成功运行:( net_kernel:start([...]) )
经过一些搜索后,我发现CouchBase和RabbitMQ-Server和Ejabberd以及其他一些使用erlang的应用程序报告了此错误(nodistribution错误)
最佳答案
您没有运行epmd,这就是econnrefused
的含义。当您启动net_kernel
时,它想在epmd中注册一个名称,以便可以找到该节点。
确保在启动net_kernel
时有一个epmd进程正在运行,并且我敢肯定问题会消失的。
关于erl -sname test
的工作,我希望它为您启动epmd吗?