6

我希望能够有两个 Erlang shell 来交谈。我在 OS X 上运行。

我在这里尝试了 tut17 示例。

我也试过:

$ erl -sname foo

然后在一个新的终端:

$ erl -sname bar

(bar@elife)1> net_adm:ping(foo@elife).
pang

有任何想法吗?

4

3 回答 3

10

在mac上有点坏了。默认情况下,mac 无法解析自己的短名称。您的主机名很可能是“elife.local”。

如果您使用 -name FQDN 启动 erl,那么 ping 将起作用。

即:你会开始它

$ erl -name foo@elife.local

这可能可以通过使 mac 能够解析它自己的短名称来解决

这是我的 mac 的示例输出。当我执行 -sname 时,我会得到与您相同的结果。

第一个节点:

$ erl -name foo@mookie.local
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
(foo@mookie.local)1> 

另一个节点:

$ erl -name bar@mookie.local
Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.7.4  (abort with ^G)
(bar@mookie.local)1> net_adm:ping('foo@mookie.local').
pong
于 2010-01-26T03:00:44.657 回答
4

一个更简单的修复可能只是编辑您的 /etc/hosts 文件并确保您有类似以下行的内容:

127.0.0.1 本地主机 elife

我的 mac 可以很好地使用短名称,我相信这就是它的原因。

于 2010-01-26T03:17:10.980 回答
0

对于节点之间的通信,两者都应该具有相同的 cookie。在同一个盒子上,它最终使用来自 $HOME/.erlang.cookie 文件的 cookie。如果此文件不存在,它会创建一个新文件并在其中放入一些随机 cookie。未来的 shell 使用相同的 cookie。但是最好通过 setcookie 参数在命令行上指定 cookie。

erl -name node1@foo.local -setcookie mycookie

于 2010-01-26T18:12:50.577 回答