Erlang: domanda sui nodi non consentiti / forse sui cookie
Domanda
Cercando di far dialogare due nodi erlang: uno su una macchina Ubuntu e uno su Windows XP.
Stiamo ricevendo un " Tentativo di connessione dal nodo non consentito " messaggio che impedisce a un nodo di ricevere messaggi dall'altro.
Entrambi utilizzano la versione 5.XXX di Erlang OTP.
Entrambi i nodi hanno lo stesso cookie (.erlang.cookie)
Stiamo iniziando il nodo del destinatario con:
erl -name fred@ipaddress
e chiamando la funzione con "fred @ ipaddress" (tra virgolette singole)
Abbiamo disattivato i firewall.
Quindi cos'altro potrebbe impedire la connessione?
Aggiornamento: stiamo usando erlang: get_cookie () per controllare il cookie su entrambi i nodi e i valori sono diversi. Quindi è questo il problema. Pensiamo di impostare il cookie inserendo lo stesso file .erlang.cookie nella directory in cui eseguiamo erlang su entrambe le macchine. Ma forse questo è il posto sbagliato?
Aggiornamento 2: grazie per le risposte a tutti. Abbiamo scelto Ranok come nostra risposta perché ha funzionato bene per noi. Sono sicuro che anche alcuni dei modi alternativi di impostare i cookie andrebbero bene.
Soluzione
Inoltre, quando avvii il sistema Erlang, c'è un flag della riga di comando -setcookie
che ti consentirà di specificare il cookie all'avvio.
erl -name fred@ipaddress -setcookie FOOBAR
Spero che aiuti, Jacob
Altri suggerimenti
Inizia controllando il cookie di ciascun nodo. Dalla shell:
erlang:get_cookie().
Se non sono gli stessi, cambia uno dei cookie del nodo in modo che corrisponda all'altro:
erlang:set_cookie(node(), "newcookie").
Se tutto funziona, è necessario capire perché l'impostazione del cookie non viene scelta dal file di configurazione o dalla riga di comando arg.
Il cookie Erlang dovrebbe trovarsi nella directory degli utenti. Non la directory dell'applicazione.
Quindi il tuo è qualcosa del tipo:
C:\Documents and Settings\InterstarUser\.erlang.cookie
Puoi vedere la posizione di HOME con il comando env
nella riga di comando se ricordo bene dai miei giorni di Windows.
net_adm: ping ()
prova net_adm: ping () da entrambi i nodi.
http : //www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/net_adm.html
erlang:set_cookie(node(), 'newcookie').
non
erlang:set_cookie(node(), "newcookie").
Un paio di cose vengono in mente:
- Hai provato a impostare il cookie tramite erlang: set_cookie su entrambi i nodi?
- Se non viene trovato alcun file .erlang.cookie nella directory $ HOME, ne verrà creato uno. Potrebbe essere che uno dei file .erlang.cookie non sia nel posto giusto su una macchina? Potresti cercare il tuo disco rigido per il file e se trovi più di quello che hai creato, Erlang potrebbe averlo messo lì e lo sta usando.