Эрланг :Запрещенные узлы / Возможно, вопрос с файлами cookie
Вопрос
Пытаюсь заставить два узла 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 :всем спасибо за ответы.Мы выбрали Ranok's в качестве нашего ответа, потому что он хорошо сработал для нас.Я уверен, что некоторые из альтернативных способов установки файла cookie тоже подошли бы.
Решение
Кроме того, когда вы запускаете систему Erlang, есть флаг командной строки -setcookie
, который позволит вам указать cookie во время запуска.
erl -name fred@ipaddress -setcookie FOOBAR
Надеюсь, это поможет, Jacob
Другие советы
Начните с проверки файлов cookie каждого узла. Из оболочки:
erlang:get_cookie().
Если они не совпадают, измените один из файлов cookie узла, чтобы он соответствовал другому:
erlang:set_cookie(node(), "newcookie").
Если все работает, вам нужно понять, почему настройки cookie не выбираются из файла конфигурации или аргумента командной строки.
Файл cookie Erlang должен находиться в каталоге пользователей. Не каталог приложения.
Итак, у вас есть что-то вроде:
C:\Documents and Settings\InterstarUser\.erlang.cookie
Вы можете увидеть местоположение HOME с помощью команды env
в командной строке, если я правильно запомнил свои дни в Windows.
net_adm:ping()
попробуйте net_adm:ping() с обоих узлов.
http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html
erlang:set_cookie(node(), 'newcookie').
нет
erlang:set_cookie(node(), "newcookie").
Несколько вещей приходят на ум:
<Ол>