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