У меня очень простой пример кода Эликсира Я хочу работать на разных узлах.Пример распределенного эликсира не работает
Первый узел находится на моем ноутбуке, второй - малиновый Pi, доступ через SSH.
Код прост:
# [email protected]
defmodule Hello do
def world, do: IO.puts "hello world"
end
# [email protected]
iex> Node.spawn_link :"[email protected]", fn -> Hello.world end
Я ожидал, что Node.spawn_link
напечатает "hello world"
на Raspberry Pi, но вместо этого он показывает ошибку говоря ** (EXIT from #PID<0.66.0>) no connect
На той же машине с двумя различными iex
экземплярами этого код работает просто отлично.
Я начинаю сессию IEx по телефону node1
с iex --sname node1 --cookie secret
и по телефону node2
с номером iex --sname node2 --cookie secret
.
Стоит также отметить, что на моем Raspberry Pi iex
начинается с этим предупреждением:
warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell) Interactive Elixir (1.0.5) - press Ctrl+C to exit (type h() ENTER for help)
Если вы звоните 'узла @ raspberry' с вашего компьютера (или вице- versa), вам нужно убедиться, что вы указали где-то, что малина-хозяин указывает на малиновый IP-адрес, иначе среда выполнения не знает, как найти «малину». Возможно, более простой способ - использовать IP-адреса: 'Node.spawn_link:" [email protected] ", ...'. Также используйте другие функции в узле, чтобы найти больше информации о том, что связано, а что нет. –
Я изменил '/ etc/hosts', чтобы указать« raspberrypi »на локальный IP-адрес малины (' 192.168.1.103'). Эликсир жаловался, что '[ошибка] ** Система работает, чтобы использовать полностью зарегистрированные имена хостов ** ** Имя хоста raspberrypi является незаконным **' Итак, я пошел и изменил имена на IP: 'Node.spawn_link:" [email protected] .1.103 ", fn -> Hello.world end', и он сказал мне, что' ** Невозможно запустить: erlang :: apply, [# Function <20.54118792/0 in: erl_eval.expr/5>, []] ([ : link]) on: "[email protected]" ** ' Уверен, что мне не хватает чего-то действительно простого здесь. – thepanuto
ОК, я понял. Это была вещь IP все время, я просто ввернул вещи. Спасибо, Хосе! – thepanuto