2010-06-26 9 views
5

Qual è la migliore pratica per l'accesso a un singolo nodo esecuzione mnesia da un'altra shell Erlang solo a visualizzare i dati nelle tabelle?accesso a un nodo mnesia da un'altra shell Erlang mentre è in esecuzione

ho provato ad aprire due gusci e li punta alla stessa posizione di directory mnesia che mi sono reso conto era una pessima idea dopo aver trovato questo nella documentazione.

-mnesia dir Directory. Il nome della directory in cui sono memorizzati tutti i dati Mnesia. Il nome della directory deve essere univoco per il nodo corrente. Due nodi possono, in nessun caso, condividere la stessa directory Mnesia. I risultati sono totalmente imprevedibili.

risposta

1

ritengo che modo più semplice si unisce alla shell remota. Basta iniziare erl con -remsh Node parametro

$ erl -sname foo 
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.7.5 (abort with ^G) 
([email protected])1> 

un altro terminale:

$ erl -sname bar -remsh '[email protected]' 
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.7.5 (abort with ^G) 
([email protected])1> 

Un'altra opzione è quella di utilizzare potenti capacità di controllo dei job di erl (Press ^G)

$ erl -sname bar 
Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.7.5 (abort with ^G) 
([email protected])1> 
User switch command 
--> h 
    c [nn]   - connect to job 
    i [nn]   - interrupt job 
    k [nn]   - kill job 
    j     - list all jobs 
    s [shell]   - start local shell 
    r [node [shell]] - start remote shell 
    q  - quit erlang 
    ? | h    - this message 
--> r '[email protected]' 
--> j 
    1 {shell,start,[init]} 
    2* {'[email protected]',shell,start,[]} 
--> c 
Eshell V5.7.5 (abort with ^G) 
([email protected])1> 
User switch command 
--> j 
    1 {shell,start,[init]} 
    2* {'[email protected]',shell,start,[]} 
--> c 1 

([email protected])1> 

Si noti che è necessario premere per mostrare il prompt della shell se si sta tornando a quello esistente.

+0

Quale sarebbe la procedura migliore per accedere a un database Mnesia in esecuzione da due applicazioni Erlang? Aggiungere un nodo al cluster Mnesia e accedervi in ​​questo modo, sembra un po 'eccessivo? –

+0

@Peter: Quindi usa il modulo rpc se è nello stesso cluster di Erlang o usa lib_chan quando vuoi comunicare attraverso il socket. –

+1

Si consiglia di utilizzare il flag -hidden quando si utilizza una shell remota, soprattutto se si ha a che fare con reti distribuite. Per esempio. erl -sname bar -remsh 'foo @ hynek-notebook' -hidden –

Problemi correlati