2010-06-26 11 views
5

¿Cuál es la mejor práctica para acceder a un solo nodo mnesia en ejecución desde otro shell Erlang para ver solo los datos en las tablas?Acceso a un nodo Mnesia desde otro shell Erlang mientras se está ejecutando

Intenté abrir dos proyectiles y señalarlos a la misma ubicación del directorio de mnesia, y me di cuenta de que era una muy mala idea después de encontrar esto en la documentación.

-mnesia dir Directorio. El nombre del directorio donde se almacenan todos los datos de Mnesia. El nombre del directorio debe ser único para el nodo actual. Dos nodos pueden, bajo ninguna circunstancia, compartir el mismo directorio de Mnesia. Los resultados son totalmente impredecibles.

Respuesta

1

Creo que la forma más fácil es unir a shell remoto. Simplemente comienza a erl con -remsh Node parámetro

$ 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> 

otro terminal:

$ 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> 

Otra opción es utilizar una potente capacidad de control de trabajos de erl (Prensa ^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> 

Tenga en cuenta que usted tiene que presionar Enter para mostrar el intérprete de comandos de shell si está cambiando a uno existente.

+0

¿Cuál sería la mejor práctica para acceder a una base de datos en ejecución de Mnesia desde dos aplicaciones de Erlang? Agregar un nodo al clúster de Mnesia y acceder de esa manera, parece un poco exagerado? –

+0

@ Peter: Luego use el módulo rpc si está en el mismo clúster Erlang o use lib_chan cuando quiera comunicarse a través del socket. –

+1

Recomiendo usar el indicador -hidden cuando se utiliza un shell remoto, especialmente si se trata de redes distribuidas. P.ej. erl -sname bar -remsh 'foo @ hynek-notebook' -hidden –

Cuestiones relacionadas