Распределенный Erlang: узнайте об удаленном хосте и функции запуска

Я пытаюсь реализовать очень простой пример, чтобы получить первое представление о распределенном Erlang. Итак, я запускаю две ноды на одной машине:

erl -sname dilbert
erl -sname dogbert

Задача состоит в том, что dogbert делает dilbert выводом Hello, World! с помощью простого fun () -> io:format("Hello, World!") end на узле dilbert. Я думал, что это будет легко с оболочкой dogbert:

([email protected])1> spawn(dilbert, fun () -> io:format("HELLO!") end).
<0.39.0>

=ERROR REPORT==== 13-Jun-2012::17:49:04 ===
** Can not start erlang:apply,[#Fun<erl_eval.20.82930912>,[]] on dilbert **

В той же оболочке при использовании nodes(). выводится []. Ну, dogbert, очевидно, не знает о dilbert, но почему это так? Или как заставить узлы в распределенном erlang узнать друг друга?


person evnu    schedule 13.06.2012    source источник


Ответы (1)


Есть две проблемы:

  1. Вы должны установить общий файл cookie для обоих узлов, чтобы они могли взаимодействовать.

    erl -sname dilbert -setcookie pointyhairedboss
    erl -sname dogbert -setcookie pointyhairedboss

  2. Вы должны указать имя хоста узла, к которому хотите подключиться. spawn('dogbert@yourhostname', fun () -> io:format("HELLO!") end).

person Isac    schedule 13.06.2012
comment
Поскольку он запустил их на одном компьютере (и, предположительно, с одной и той же учетной записи пользователя), они должны автоматически получить один и тот же файл cookie по умолчанию. - person RichardC; 13.06.2012