2012-12-29 27 views
5

Tôi đã biên dịch ứng dụng Erlang của mình bằng cách sử dụng thanh cốt thép basho tạo ra tệp thực thi escript độc lập. Tôi chạy nó từ dòng lệnh như: ./myapp myconfig.configCách đặt tên nút Erlang, khi chạy ứng dụng Erlang bằng thanh cốt thép basho từ dòng lệnh

Nhiệm vụ của tôi là làm thế nào tôi có thể xác định tên nút Erlang chạy ứng dụng của tôi. Khi trong ứng dụng của tôi, tôi chạy lệnh 'node()', nó trả về theo mặc định "nonode @ nohost" nhưng tôi muốn đặt tên cho nút đó (ví dụ [email protected]), vì vậy khi tôi chạy 'node()' trong đơn đăng ký của tôi, tôi muốn xem '[email protected]' thay vì 'nonode @ nohost'

Tôi biết về "erlang -name '[email protected]'" nhưng vui lòng xem xét tôi chạy ứng dụng từ lệnh hàng. Tôi nghĩ rằng một máy ảo Erlang được chạy và chấm dứt trong suốt thời gian ứng dụng một cách tự động.

Trả lời

12

Cách tốt nhất là tất nhiên để đặt nodename trong dòng lệnh thông qua "nút tên" hoặc "nút tên @ host". Nhưng thay vào đó, có thể sử dụng mô-đun «net_kernel». Nó được mô tả tại http://www.erlang.org/doc/man/net_kernel.html

$ erl 
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] 

Eshell V5.9.1 (abort with ^G) 
1> node(). 
[email protected] 
2> net_kernel:start([rumata, shortnames]). 
{ok,<0.34.0>} 
([email protected])3> node(). 
'[email protected]' 
([email protected])4> net_kernel:stop(). 
ok 
5> node(). 
[email protected] 
6> net_kernel:start(['[email protected]', longnames]). 
{ok,<0.44.0>} 
([email protected])7> node(). 
[email protected] 
+3

Đối với tôi, lỗi này xảy ra: Giao thức: "inet_tcp": lỗi đăng ký: {{badmatch, {error, econnrefused}}, [{inet_tcp_dist, nghe, 1, .... –

+1

@SepehrSamini, bạn nên bắt đầu ' epmd' trước khi thực thi tập lệnh: 'epmd -daemon' – Lol4t0

0

Tôi đã xem xét một ứng dụng được phân phối bằng thép cây (nitơ). Họ vượt qua hầu hết các đối số vm trong một tập tin cấu hình bằng cách sử dụng tham số -args_file:

erts-5.9\bin\werl -pa %PA% -boot releases/2.1.0/nitrogen -embedded -config etc/app.generated.config -args_file etc/vm.args 

và trong vm.args chỉ cần sử dụng các tham số -name để xác định tên nút:

-name [email protected] 
0

Bạn có thể sử dụng dòng "giả lập đối số" ma thuật (như được mô tả trong escript docs). Ví dụ:

#!/usr/bin/env escript 
%%! -sname ohai 

main(_Args) -> 
    io:format("I am: ~p~n", [node()]). 

Các %%! dòng -prefixed được xử lý như thể nó đã được thông qua với erl trên dòng lệnh, cho phép bạn chỉ định tên nút từ đó.

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