Erlang:不允许的节点/也许 Cookie 问题
Posted
技术标签:
【中文标题】Erlang:不允许的节点/也许 Cookie 问题【英文标题】:Erlang : Disallowed Nodes / Maybe Cookie question 【发布时间】:2010-10-01 21:11:21 【问题描述】:试图让两个 erlang 节点相互通信:一个在 Ubuntu 机器上,一个在 Windows XP 上。
我们收到“来自不允许节点的连接尝试”消息,该消息阻止一个节点接收来自另一个节点的消息。
他们都使用 5.XXX 版本的 Erlang OTP。
两个节点都有相同的 cookie (.erlang.cookie)
我们开始接收节点:
erl -name fred@ipaddress
并使用“fred@ipaddress”(单引号)对其调用函数
我们已关闭防火墙。
那么还有什么可能会阻止连接?
更新:我们使用 erlang:get_cookie() 来检查两个节点上的 cookie,并且值不同。这就是问题所在。我们认为我们通过将相同的 .erlang.cookie 文件放在我们在两台机器上运行 erlang 的目录中来设置 cookie。但也许这是错误的地方?
更新2:感谢大家的回答。我们选择 Ranok 作为我们的答案,因为它对我们很有效。我相信一些设置 cookie 的替代方法也可以。
【问题讨论】:
【参考方案1】:另外,当你启动 Erlang 系统时,有一个命令行标志 -setcookie
可以让你在启动时指定 cookie。
erl -name fred@ipaddress -setcookie FOOBAR
希望对您有所帮助, 雅各布
【讨论】:
【参考方案2】:首先检查每个节点的 cookie。从外壳:
erlang:get_cookie().
如果它们不相同,则更改节点的其中一个 cookie 以匹配另一个:
erlang:set_cookie(node(), "newcookie").
如果一切正常,您需要查看为什么没有从配置文件或命令行参数中选择 cookie 设置。
【讨论】:
不应该从erl而不是shell运行吗?【参考方案3】:Erlang cookie 应该在 users 目录中。不是应用程序目录。
所以你的是这样的:
C:\Documents and Settings\InterstarUser\.erlang.cookie
如果我没记错的话,你可以在命令行中使用命令env
查看 HOME 的位置。
【讨论】:
【参考方案4】:net_adm:ping()
从两个节点尝试 net_adm:ping()。
http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html
【讨论】:
【参考方案5】:erlang:set_cookie(node(), 'newcookie').
不是
erlang:set_cookie(node(), "newcookie").
【讨论】:
【参考方案6】:我想到了几件事:
-
您是否尝试过在两个节点上通过 erlang:set_cookie 设置 cookie?
如果在 $HOME 目录中没有找到 .erlang.cookie 文件,将创建一个。可能是 .erlang.cookie 文件之一不在一台机器上的正确位置?您可以在硬盘驱动器中搜索该文件,如果找到的文件不止您创建的文件,erlang 可能已将其放在那里并正在使用它。
【讨论】:
以上是关于Erlang:不允许的节点/也许 Cookie 问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 unix 批处理自动化 Erlang shell 节点