2010-06-26 22 views
5

Cách tốt nhất để truy cập vào nút mnesia chạy duy nhất từ ​​một vỏ Erlang khác để chỉ xem dữ liệu trong các bảng là gì?Truy cập nút Mnesia từ một vỏ Erlang khác trong khi nó đang chạy

Tôi đã thử mở hai vỏ và chỉ chúng vào cùng một vị trí thư mục mnesia mà tôi nhận ra là một ý tưởng rất xấu sau khi tìm thấy điều này trong tài liệu.

Danh bạ dir thư mục. Tên của thư mục chứa tất cả dữ liệu Mnesia. Tên của thư mục phải là duy nhất cho nút hiện tại. Hai nút có thể, trong mọi trường hợp, chia sẻ cùng một thư mục Mnesia. Kết quả là hoàn toàn không thể đoán trước.

Trả lời

1

Tôi nghĩ rằng cách dễ nhất là tham gia vào vỏ từ xa. Chỉ cần bắt đầu erl với -remsh Node tham số

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

Một thiết bị đầu cuối:

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

lựa chọn khác là sử dụng khả năng điều khiển công việc mạnh mẽ của erl (Nhấn ^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> 

Lưu ý rằng bạn phải nhấn Enter để hiển thị dấu nhắc trình bao nếu bạn đang chuyển về trạng thái hiện tại.

+0

Cách tốt nhất để truy cập cơ sở dữ liệu Mnesia đang chạy từ hai ứng dụng Erlang là gì? Thêm một nút vào cụm Mnesia và truy cập nó theo cách đó, có vẻ hơi quá mức? –

+0

@Peter: Sau đó sử dụng mô đun rpc nếu nó nằm trong cùng một cụm Erlang hoặc sử dụng lib_chan khi bạn muốn giao tiếp thông qua socket. –

+1

Tôi khuyên bạn nên sử dụng cờ gắn cờ khi sử dụng vỏ từ xa, đặc biệt nếu bạn đang xử lý các mạng được phân phối. Ví dụ. erl -sname bar -remsh 'foo @ hynek-notebook' -hidden –

Các vấn đề liên quan