Erlang: запрещенные узлы - PullRequest
       26

Erlang: запрещенные узлы

13 голосов
/ 16 января 2009

Попытка заставить два узла erlang общаться друг с другом: один на компьютере с Ubuntu и один на Windows XP.

Мы получаем сообщение « Попытка подключения от запрещенного узла », которое запрещает одному узлу получать сообщения от другого.

Они оба используют версии 5.XXX Erlang OTP.

Оба узла имеют одинаковые файлы cookie (.erlang.cookie)

Мы запускаем узел получателя с:

erl -name fred@ipaddress

и вызов функции с помощью 'fred @ ipaddress' (в одинарных кавычках)

Мы отключили брандмауэры.

Так что еще может мешать соединению?

Обновление: мы используем erlang: get_cookie (), чтобы проверить cookie на обоих узлах, и значения отличаются. Так в этом ли проблема? Мы думаем, что устанавливаем cookie, помещая один и тот же файл .erlang.cookie в каталог, где мы запускаем erlang на обеих машинах. Но, может быть, это не то место?

Обновление 2: спасибо всем за ответы. Мы выбрали Ранок в качестве нашего ответа, потому что он хорошо сработал для нас. Я уверен, что некоторые альтернативные способы установки cookie тоже подойдут.

Ответы [ 6 ]

12 голосов
/ 17 января 2009

Кроме того, когда вы запускаете систему Erlang, есть флаг командной строки -setcookie, который позволит вам указать cookie во время запуска.

erl -name fred@ipaddress -setcookie FOOBAR

Надеюсь, это поможет, Jacob

5 голосов
/ 17 января 2009

Начните с проверки куки каждого узла. Из скорлупы:

erlang:get_cookie().

Если они не совпадают, измените один из файлов cookie узла, чтобы он соответствовал другому:

erlang:set_cookie(node(), "newcookie").

Если все работает, вам нужно понять, почему настройки cookie не выбираются из файла конфигурации или аргумента командной строки.

3 голосов
/ 17 января 2009

Файл cookie Erlang должен находиться в каталоге пользователей. Не каталог приложения.

Так что твое это что-то вроде:

C:\Documents and Settings\InterstarUser\.erlang.cookie

Вы можете увидеть местоположение HOME с помощью команды env в командной строке, если я правильно помню из моих дней Windows.

2 голосов
/ 11 августа 2009
erlang:set_cookie(node(), 'newcookie').

не

erlang:set_cookie(node(), "newcookie").
2 голосов
/ 18 января 2009

net_adm: пинг ()

попробуйте net_adm: ping () с обоих узлов.

http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html

1 голос
/ 16 января 2009

На ум приходит пара вещей:

  1. Вы пытались установить cookie через erlang: set_cookie на обоих узлах?
  2. Если в каталоге $ HOME файл .erlang.cookie не найден, он будет создан. Может ли быть так, что один из файлов .erlang.cookie не в нужном месте на одной машине? Вы можете найти файл на вашем жестком диске, и если вы найдете больше, чем тот, который вы создали, erlang мог бы поместить его туда и использовать.
...