Получение двух оболочек erl для общения в OS X

Я хочу иметь возможность общаться с двумя оболочками Erlang. Я работаю на OS X.

Я попробовал пример tut17 здесь.

Я также пробовал:

$ erl -sname foo

а затем в новом терминале:

$ erl -sname bar

(bar@elife)1> net_adm:ping(foo@elife).
pang

Любые идеи?


person Eli    schedule 26.01.2010    source источник


Ответы (3)


Это немного сломано на Mac. По умолчанию Mac не может разрешить собственное короткое имя. Имя вашего хоста действительно, вероятно, «elife.local».

Если вы запустите erl с -name FQDN, то ping будет работать.

то есть: вы бы начали с

$ erl -name [email protected]

это, вероятно, можно исправить, сделав Mac способным разрешать свое собственное короткое имя

Вот пример вывода с моего Mac. Когда я делаю -sname, я получаю тот же результат, что и вы.

Первый узел:

$ erl -name [email protected]
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)
([email protected])1> 

Другой узел:

$ erl -name [email protected]
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)
([email protected])1> net_adm:ping('[email protected]').
pong
person David Budworth    schedule 26.01.2010
comment
Если кто-то получает эту ошибку, * 1: синтаксическая ошибка перед: '.', обязательно заключите имя в одинарные кавычки. net_adm:ping('[email protected]'). - person Coderdad; 12.03.2013

Более простое исправление может заключаться в редактировании файла /etc/hosts и наличии такой строки:

127.0.0.1 локальный хост elife

Мой Mac отлично работает с короткими именами, и я считаю, что это то, что сделало это.

person Jacob    schedule 26.01.2010
comment
Это правильный ответ. Erlang преобразует имена в IP-адреса так же, как и все остальное. Как правило, ваш net_adm:ping не будет работать, если на обычный icmp ping, отправленный на то же имя, не будет ответа. - person Zed; 26.01.2010
comment
помимо OSX игнорирует файл hosts. на маке есть другое место, где можно установить, не помню где. редактировать: по крайней мере, это было изначально, не пробовал под Snow Leopard - person David Budworth; 27.01.2010
comment
Кроме того, установка 127.0.0.1 для разрешения вашего имени хоста нарушит работу многих приложений Java (любое приложение, использующее RMI). обычно вы хотите, чтобы ваше имя хоста указывало на ваш общедоступный IP-адрес. - person David Budworth; 27.01.2010
comment
да, ваше имя хоста в /etc/hosts заставляет -sname работать на Snow Leopard (я пытался). Но имеет недостаток для вещей, которые на самом деле пытаются разрешить свое собственное имя хоста (например, Java RMI). - person David Budworth; 28.01.2010

Чтобы узлы взаимодействовали друг с другом, у обоих должен быть один и тот же файл cookie. В том же окне он работает, поскольку в конечном итоге использует файл cookie из файла $HOME/.erlang.cookie. Если этого файла нет, он создает новый файл и помещает в него случайный файл cookie. Будущие оболочки используют тот же файл cookie. Но всегда лучше указать cookie в командной строке через параметр setcookie.

erl -name [email protected] -setcookie mycookie

person Yogish Baliga    schedule 26.01.2010
comment
Не лучше устанавливать cookie через аргумент командной строки, потому что другие пользователи в той же системе смогут узнать ваш cookie, просто просматривая список процессов, и после этого злоумышленник сможет отправлять сообщения на ваши узлы erlang. Если вы храните файлы cookie в файле, не забудьте установить соответствующие разрешения для этого файла. - person taro; 17.08.2010