Ho un campione di codice Elixir molto semplice che voglio eseguire su nodi diversi.L'esempio di elisir distribuito non funziona
Il primo nodo è sul mio portatile, il secondo è un Raspberry Pi, accessibile tramite SSH.
Il codice è semplice:
# [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
Mi aspettavo che Node.spawn_link
sarebbe stampare "hello world"
sul Raspberry Pi, ma invece si vede un errore che dice ** (EXIT from #PID<0.66.0>) no connect
Sulla stessa macchina con due differenti iex
casi questo il codice funziona bene.
Sto avviando la sessione IEx su node1
con iex --sname node1 --cookie secret
e su node2
con iex --sname node2 --cookie secret
.
E 'anche interessante notare che sul mio Raspberry Pi iex
inizia con questo avvertimento:
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)
Se si chiama 'nodo @ raspberry' dal computer (o vice- versa), è necessario assicurarsi di aver dichiarato da qualche parte che il lampone host punta all'IP del lampone, altrimenti il runtime non sa come trovare il "raspberry". Forse un modo più semplice per ora è usare gli IP: 'Node.spawn_link:" [email protected] ", ...'. Usa anche le altre funzioni nel nodo per trovare maggiori informazioni su cosa è connesso e cosa no. –
Ho modificato '/ etc/hosts' per puntare' raspberrypi' sull'IP locale del lampone ('192.168.1.103'). Elixir si è lamentato che '[errore] ** Sistema in esecuzione per utilizzare nomi host completi ** ** Nome host raspberrypi è illegale **' Ok, quindi sono andato e ho cambiato i nomi in IP: 'Node.spawn_link:" [email protected] .1.103 ", fn -> Hello.world end' e mi ha detto che' ** Impossibile avviare: erlang :: apply, [# Function <20.54118792/0 in: erl_eval.expr/5>, []] ([ : link]) su: "[email protected]" ** ' Sono sicuro che mi manca qualcosa di veramente semplice qui. – thepanuto
OK, ho capito. Era sempre la cosa dell'IP, ho solo rovinato tutto. Grazie, José! – thepanuto