Вопрос

Я хочу иметь возможность общаться между двумя оболочками 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top