当BashoRebar从命令行运行Erlang应用程序时,如何设置Erlang节点名称

当BashoRebar从命令行运行Erlang应用程序时,如何设置Erlang节点名称,erlang,rebar,Erlang,Rebar,我已经使用bashorebar编译了我的Erlang应用程序,它生成了一个独立的escript可执行文件。我从命令行运行它,如下所示: ./myapp myconfig.config 我的问题是如何确定运行我的应用程序的Erlang节点名。在我的应用程序中运行“node()”命令时,默认情况下会返回“nonode@nohost“但我想为该节点命名(例如。mynode@domain.com),因此,当我在应用程序中运行'node()'时,我希望看到'mynode@domain.com“而不是”no

我已经使用bashorebar编译了我的Erlang应用程序,它生成了一个独立的escript可执行文件。我从命令行运行它,如下所示: ./myapp myconfig.config

我的问题是如何确定运行我的应用程序的Erlang节点名。在我的应用程序中运行“node()”命令时,默认情况下会返回“nonode@nohost“但我想为该节点命名(例如。mynode@domain.com),因此,当我在应用程序中运行'node()'时,我希望看到'mynode@domain.com“而不是”nonode@nohost"


我知道“erlang-name”mynode@domain.com“但是请考虑我从命令行运行应用程序。我认为Erlang VM会在应用程序生命周期内自动运行和终止。

最好的方法当然是通过“-sname node”或“-name”在命令行中设置nodenamenode@host". 但也可以使用“net_内核”模块。这一点在

$erl
Erlang R15B01(erts-5.9.1)[源代码][64位][smp:2:2][异步线程:0][hipe][内核轮询:false]
Eshell V5.9.1(使用^G中止)
1> node()。
nonode@nohost
2> net_内核:start([rumata,shortnames])。
{好的,}
(rumata@rumata-osx)3>节点()。
'rumata@rumata-osx'
(rumata@rumata-osx)4>net_内核:停止()。
好啊
5> node()。
nonode@nohost
6> net_内核:启动(['rumata@myhost“,longnames])。
{好的,}
(rumata@myhost)7> node()。
rumata@myhost

我查看了一个使用钢筋(氮气)分发的应用程序。它们使用参数-args\u file传递配置文件中的大多数vm参数:

erts-5.9\bin\werl -pa %PA% -boot releases/2.1.0/nitrogen -embedded -config etc/app.generated.config  -args_file etc/vm.args
在vm.args中,只需使用参数-name来定义节点名称:

-name nitrogen@127.0.0.1
您可以使用神奇的“emulator arguments”行(如中所述)。例如:

#!/usr/bin/env escript
%%! -sname ohai

main(_Args) ->
    io:format("I am: ~p~n", [node()]).

%%-前缀行被视为在命令行上传递给
erl
,允许您从那里指定节点名称。

对我来说,它引发了以下错误:协议:“inet_tcp”:寄存器错误:{{badmatch,{error,econnreference}[{inet_tcp_dist,listen,1,…。@sephersamini,您应该在执行脚本之前启动
epmd
epmd-daemon
#!/usr/bin/env escript
%%! -sname ohai

main(_Args) ->
    io:format("I am: ~p~n", [node()]).