0

鉄筋の下の分散テストに問題があります。Rebar は name でノードを開始しますnonode@nohostmake_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()。

4

1 に答える 1