2つのErlangシェルで話せるようにしたいと思います。私はOSXで実行しています。
ここでtut17の例を試しました。
私も試しました:
$ erl -sname foo
そして、新しいターミナルで:
$ erl -sname bar
(bar@elife)1> net_adm:ping(foo@elife).
pang
何か案は?
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
より簡単な修正は、/ etc / hostsファイルを編集して、次のようなものがあることを確認することです。
127.0.0.1 localhost elife
私のマックはショートネームでうまく動作します、そして私はこれがそれをしたと信じています。
ノードが相互に通信するには、両方に同じCookieが必要です。同じボックスで、$ HOME/.erlang.cookieファイルのCookieを使用することになります。このファイルが存在しない場合は、新しいファイルを作成し、その中にランダムなCookieを配置します。将来のシェルは同じCookieを使用します。ただし、コマンドラインでsetcookieパラメーターを使用してCookieを指定することをお勧めします。
erl -name node1@foo.local -setcookie mycookie