簡體   English   中英

在命令行中使用basho rebar運行Erlang應用程序時,如何設置Erlang節點名稱

[英]How set Erlang node name, when run an Erlang application by basho rebar from command line

我使用basho rebar編譯了我的Erlang應用程序,它生成了一個獨立的escript可執行文件。 我從命令行運行它,如:./ myapp myconfig.config

我的問題是如何確定運行我的應用程序的Erlang節點名稱。 在我的應用程序中運行'node()'命令時,它默認返回“nonode @ nohost”,但我想將我的名字命名為該節點(例如mynode@domain.com),所以當我運行'node()'時在我的應用程序中,我喜歡看'mynode@domain.com'而不是'nonode @ nohost'

我知道“erlang -name'mynode@domain.com'”但請考慮從命令行運行應用程序。 我認為Erlang VM會在應用程序生命周期內自動運行和終止。

當然,最好的方法是通過“-sname node”或“-name node @ host”在命令行中設置nodename。 但是可以使用`net_kernel'模塊代替。 它在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().
nonode@nohost
2> net_kernel:start([rumata, shortnames]).
{ok,<0.34.0>}
(rumata@rumata-osx)3> node().
'rumata@rumata-osx'
(rumata@rumata-osx)4> net_kernel:stop().
ok
5> node().
nonode@nohost
6> net_kernel:start(['rumata@myhost', longnames]). 
{ok,<0.44.0>}
(rumata@myhost)7> node().
rumata@myhost

我看了一下用鋼筋(氮氣)分發的應用程序。 它們使用參數-args_file傳遞配置文件中的大多數vm參數:

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

在vm.args中只需使用參數-name來定義節點名稱:

-name nitrogen@127.0.0.1

您可以使用神奇的“模擬器參數”行(如escript文檔中所述 )。 例如:

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

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

%%! -prefixed行被視為在命令行上傳遞給erl ,允許您從那里指定節點名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM