我正在使用relx构建我的版本,我无法使用默认的-sname someuser@127.0.0.1
。
相反,我想做一些像-sname someuser @`hostname -i`这样的东西,以便在启动时定义节点的公共IP。使用-sname someuser@
主机名-i``不起作用,因为hostname -i
未扩展为真实IP。我尝试使用net_kernel:start(xxxxxxx)但它没有用。
有没有办法在使用relx的vm.args中获得动态-sname
?
谢谢:)
答案 0 :(得分:1)
正如in the documentation所写(并在 @Soup d' Campbells 的评论中回答),-sname
和-name
标记不需要主机名,并将自动填充节点ID的Host
部分与主机的sid(短的不完全限定为-sname,FQDN为-name):
-sname Name使Erlang运行时系统成为分布式节点,类似于-name,但是节点名称Name @ Host的主机名部分 将是短名称,不完全合格。
这有时是DNS运行分布式Erlang的唯一方法 (域名系统)未运行。没有沟通 在使用-sname标志运行的节点和使用该标志运行的节点之间 -name标志,因为节点名在分布式Erlang系统中必须是唯一的。
-name Name使Erlang运行时系统进入分布式节点。此标志调用节点所需的所有网络服务器 分散式。见net_kernel(3)。还确保epmd继续运行 Erlang启动前的当前主机。见epmd(1)。
节点名称为Name @ Host,其中Host为full 当前主机的限定主机名。对于短名称,请使用 改为-sname标志。
如果您计划使用分布式节点,并且域中确实有DNS,请使用-name
标志,因为它还会调用所有必需的网络服务器(如上所述)。
亲眼看看:
$> erl -sname bouly
(bouly@myserver)1>
$> erl -name bouly
(bouly@myserver.myhome.net)1>
答案 1 :(得分:0)
好像你用参数误导了net_kernel:start()
。正确的论证形式是[姓名,短名]或[姓名,长号];名称是原子,应形成“localpart”或“localpart @ host”(可能你需要list_to_atom()
)。
例如:
2> net_kernel:start(['abc@localhost', shortnames]).
{ok,<0.39.0>}
,结果:
$ epmd -names
epmd: up and running on port 4369 with data:
name abc at port 46623