鉄筋の下の分散テストに問題があります。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()。