我面临一个问题,希望有人能帮助我。

我尝试通过以下方式开始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吗?

08-25 18:31