8

スタンドアロンのescript実行可能ファイルを作成するbashorebarを使用してErlangアプリケーションをコンパイルしました。次のようなコマンドラインから実行します:./ myapp myconfig.config

私の質問は、アプリケーションを実行するErlangノード名をどのように判別できるかということです。私のアプリケーションで「node()」コマンドを実行すると、デフォルトで「nonode @ nohost」が返されますが、そのノード(mynode@domain.comなど)に自分の名前を付けたいので、「node()」を実行すると私のアプリケーションでは、「nonode@nohost」ではなく「mynode@domain.com」が表示されます。

「erlang-name'mynode@domain.com'」について知っていますが、コマンドラインからアプリケーションを実行することを検討してください。Erlang VMは、アプリケーションの存続期間中に自動的に実行および終了されると思います。

4

3 に答える 3

19

もちろん、最良の方法は、コマンドラインで「-snamenode」または「-namenode@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
于 2012-12-29T07:30:08.287 に答える
0

鉄筋(窒素)で配布されているアプリケーションを見てみました。これらは、パラメーター-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
于 2012-12-29T07:48:17.787 に答える
0

魔法の「エミュレーター引数」行を使用できます(escriptドキュメントで説明されています)。例えば:

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

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

%%!-prefixed行は、コマンドラインで渡されたかのように扱われ、そこerlからノード名を指定できます。

于 2012-12-29T22:45:51.487 に答える