开发者

Accessing a Mnesia node from another Erlang shell while it is running

开发者 https://www.devze.com 2023-01-04 16:01 出处:网络
What is the best practice to accessing a single running mnesia node from another Erlang shell to only view data in the tables?

What is the best practice to accessing a single running mnesia node from another Erlang shell to only view data in the tables?

I tried opening two shells and pointing them to the same mnesia directory location which I realized was a very bad idea after finding this in the documentation.

-mnesia dir Directory. The name of the directory where all Mnesia data is stored. The name of the directory must be unique for the current node. Two nodes may, under no circumstances, share the same Mnesia directory. The results are totally unpr开发者_JAVA技巧edictable.


I think that easiest way is joining to remote shell. Just start erl with -remsh Node parameter

$ 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)
(foo@hynek-notebook)1> 

Another terminal:

$ erl -sname bar -remsh 'foo@hynek-notebook'
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)
(foo@hynek-notebook)1> 

Another option is use powerful job control capability of 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)
(bar@hynek-notebook)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 'foo@hynek-notebook'
 --> j
   1  {shell,start,[init]}
   2* {'foo@hynek-notebook',shell,start,[]}
 --> c 
Eshell V5.7.5  (abort with ^G)
(foo@hynek-notebook)1> 
User switch command
 --> j
   1  {shell,start,[init]}
   2* {'foo@hynek-notebook',shell,start,[]}
 --> c 1

(bar@hynek-notebook)1>

Note that you have to press Enter to show shell prompt if you are switching back to existing one.

0

精彩评论

暂无评论...
验证码 换一张
取 消