鉄筋の下の分散テストに問題があります。Rebar は name でノードを開始しますnonode@nohost。make_distribその後、通常のノード名を提供するヘルプ関数を呼び出し、配布作業を開始します。
スレーブ ノードを起動した後、ラムダを送信できませんでした。エラーがありました:
=エラー レポート==== 2013 年 7 月 27 日::22:48:02 ===
ノード 'test1@just' のプロセスでエラーが発生し、終了値: {{badfun,#Fun<msg_proxy_tests.2.117197241>},[{error_handler,undefined_lambda,3,[{file,"error_handler.erl"},{line,64 }]}]}
しかし!簡単な方法でテストを実行すると、すべてうまくいきます:
$erl
1> c(msg_proxy_tests)。
{OK,msg_proxy_tests}
2> eunit:test({module, msg_proxy_tests},[verbose])。
======================== EUnit ========================
モジュール 'msg_proxy_tests'msg_proxy_tests: distrib_mode_test_ (ノードの配布モード テスト)...
msg_proxy_tests.erl:14:<0.48.0>: ノード () = [test1@just]
msg_proxy_tests.erl:15:<9999.39.0>: ノード () = test1@just
msg_proxy_tests.erl:17:<0.48.0>: ノード () = [test1@just]
[0.238 秒] OK
どうすればこれを修正できますか?
モジュールソース:
-module(msg_proxy_tests)。
-include_lib("eunit/include/eunit.hrl")。
distrib_mode_test_()->
{「ノードの分散モード テスト」、タイムアウト、60、
楽しい() ->
{OK, ホスト} = inet:gethostname(),
make_distrib("tests@"++Host, shortnames),
スレーブ: 開始 (ホスト、テスト 1)、
?debugVal(ノード())、
spawn(list_to_atom("test1@"++Host), fun()-> ?debugVal(node()) end),
タイマー:スリープ(100)、
?debugVal(ノード())、
stop_distrib(),
わかった
終わり}。
-spec make_distrib( NodeName::string()|atom(), NodeType::shortnames | longnames) ->
{わかりました、ActualNodeName::atom} | {エラー、理由::term()}。
make_distrib(NodeName, NodeType) when is_list(NodeName) ->
make_distrib(erlang:list_to_atom(NodeName), NodeType);
make_distrib(NodeName, NodeType) ->
ケース node() の
'nonode@nohost' ->
[] = os:cmd("epmd -デーモン"),
case net_kernel:start([NodeName, NodeType]) of
{ok, _Pid} -> ノード()
終わり;
現在のノード -> 現在のノード
終わり。
stop_distrib()->
net_kernel:stop()。