让两个 erl shell 在 OS X 上进行对话
我希望能够有两个 Erlang shell 来交谈。我在 OS X 上运行。
我在 此处尝试了 tut17 示例。
我也尝试过:
$ erl -sname foo
然后在新的终端中:
$ erl -sname bar
(bar@elife)1> net_adm:ping(foo@elife).
pang
有什么想法吗?
I want to be able to have two Erlang shells to talk. I'm running on OS X.
I tried the tut17 example here.
I've also tried:
$ erl -sname foo
and then in a new Terminal:
$ erl -sname bar
(bar@elife)1> net_adm:ping(foo@elife).
pang
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它在 mac 上有点坏了。默认情况下,mac 无法解析自己的短名称。您的主机名很可能是“elife.local”。
如果您使用 -name FQDN 启动 erl,则 ping 将起作用。
即:你可以用这个启动它,
这可能可以通过使 mac 能够解析它自己的短名称来解决。
这是我的 mac 的示例输出。当我执行 -sname 时,我得到与你相同的结果。
第一个节点:
另一个节点:
It's kind of broken on the mac. By default, the mac can't resolve its own shortname. Your host's name is really probably "elife.local".
If you start erl with -name FQDN, then the pings will work.
ie: you would start it with
this probably could be fixed by making the mac capable of resolving it's own short name
Here's example output from my mac. When I do -sname I get the same result as you.
The first node:
The other node:
一个更简单的修复可能只是编辑您的 /etc/hosts 文件并确保您有类似以下行的内容:
127.0.0.1 localhost elife
我的 mac 可以很好地使用短名称,我相信这就是它的作用。
A simpler fix might just be editing your /etc/hosts file and make sure you have something like this line:
127.0.0.1 localhost elife
My mac works fine with shortnames, and I believe this is what did it.
为了使节点相互通信,两个节点都应该具有相同的 cookie。在同一个盒子上,它最终使用 $HOME/.erlang.cookie 文件中的 cookie 来工作。如果该文件不存在,它将创建一个新文件并在其中放入一些随机 cookie。未来的 shell 使用相同的 cookie。但最好在命令行上通过 setcookie 参数指定 cookie。
erl -name [电子邮件受保护] -setcookie mycookie
For the nodes communicate with each other, both should have the same cookie. On the same box it works as it end up using the cookie from $HOME/.erlang.cookie file. If this file is not present, it create a new file and put some random cookie in it. Future shells use the same cookie. But it is always better to specify the cookie on the command line via setcookie parameter.
erl -name [email protected] -setcookie mycookie