2012-12-29 9 views
5

Zrobiłem kompilację mojej aplikacji Erlang za pomocą basho zbrojenia, który tworzy samodzielny plik wykonywalny escript. Uruchomiłem go z wiersza poleceń, na przykład: ./myapp myconfig.configW jaki sposób ustawić nazwę węzła Erlang, po uruchomieniu aplikacji Erlang przez basho zbrojenie z linii poleceń

Moje zadanie polega na tym, w jaki sposób mogę określić nazwę węzła Erlang, która uruchamia moją aplikację. Kiedy w mojej aplikacji uruchamiam polecenie 'node()', to zwraca on domyślnie "nonode @ nohost", ale chcę podać moją nazwę temu węzłowi (np. [email protected]), więc kiedy uruchomię 'node()' w mojej aplikacji lubię "[email protected]" zamiast "nonode @ nohost"

Wiem o "erlang -name" [email protected] "", ale proszę rozważyć uruchomienie aplikacji z polecenia linia. Myślę, że maszyna wirtualna Erlang jest uruchamiana i kończy się automatycznie w czasie trwania aplikacji.

Odpowiedz

12

Najlepszym sposobem jest oczywiście ustawienie nazwy w linii komend poprzez "-sygnał-węzeł" lub "-name-węzeł @ host". Ale możliwe jest użycie modułu `net_kernel '. Jest to opisane w 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

Dla mnie to wywołuje ten błąd: Protokół: "inet_tcp": błąd rejestracji: {{badmatch, {error, econnrefused}}, [{inet_tcp_dist, listen, 1, .... –

+1

@SepehrSamini, powinieneś uruchomić ' epmd' przed uruchomieniem skryptu: 'epmd -daemon' – Lol4t0

0

miałem Patrz na zastosowaniu rozproszonego z pręta zbrojeniowego (azot). Przechodzą one większość argumentów vm w pliku konfiguracyjnym używając -args_file parametru:

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

aw vm.args prostu użyć -name parametru do określenia nazwy węzła:

-name [email protected] 
0

Ty możliwe, użyj magicznej "argumenty emulatora" (jak opisano w escript docs). Na przykład:

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

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

%%! -prefixed linia jest traktowany tak, jakby były przekazywane do erl w linii poleceń, co pozwala na określenie nazwy węzła stamtąd.

Powiązane problemy