Как заставить две оболочки erl общаться в OS X
Вопрос
Я хочу иметь возможность общаться между двумя оболочками Erlang.Я работаю на OS X.
Я попробовал пример tut17 здесь.
Я также пробовал:
$ erl -sname foo
а затем в новом терминале:
$ erl -sname bar
(bar@elife)1> net_adm:ping(foo@elife).
pang
Есть идеи?
Решение
На Mac он немного сломан.По умолчанию Mac не может разрешить собственное короткое имя.Имя вашего хоста, скорее всего, «elife.local».
Если вы запустите erl с -name FQDN, пинги будут работать.
то есть:ты бы начал это с
$ 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 локальный хост
Мой Mac отлично работает с короткими именами, и я считаю, что именно это и произошло.
Чтобы узлы взаимодействовали друг с другом, оба должны иметь один и тот же файл cookie.На том же компьютере это работает, поскольку в конечном итоге используется файл cookie из файла $HOME/.erlang.cookie.Если этот файл отсутствует, он создает новый файл и помещает в него случайный файл cookie.Будущие оболочки будут использовать тот же файл cookie.Но всегда лучше указать файл cookie в командной строке с помощью параметра setcookie.
erl -name node1@foo.local -setcookie mycookie