我对钢筋下的分布式测试有一些问题。Rebar 以 name 开始节点nonode@nohost
。在它之后,我调用make_distrib
提供正常节点名称的帮助函数并开始分发工作。
启动从节点后,我无法向它发送任何 lambda。我有错误:
=错误报告==== 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)。 {好的,msg_proxy_tests} 2> eunit:test({module, msg_proxy_tests},[详细])。 ========================= 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 秒] 好
我怎样才能解决这个问题?
模块来源:
-模块(msg_proxy_tests)。 -include_lib("eunit/include/eunit.hrl")。 distrib_mode_test_()-> {"节点的分布式模式测试", timeout, 60, 乐趣()-> {ok, 主机} = inet:gethostname(), make_distrib("tests@"++Host, shortnames), 从机:开始(主机,test1), ?debugVal(节点()), spawn(list_to_atom("test1@"++Host), fun()-> ?debugVal(node()) end), 定时器:睡眠(100), ?debugVal(节点()), stop_distrib(), 行 结尾}。 -spec make_distrib(NodeName::string()|atom(), NodeType::shortnames | longnames) -> {ok, ActualNodeName::atom} | {错误,原因::term()}。 make_distrib(NodeName, NodeType) 当 is_list(NodeName) -> make_distrib(erlang:list_to_atom(NodeName), NodeType); make_distrib(节点名称,节点类型)-> 案例节点()的 'nonode@nohost' -> [] = os:cmd("epmd -daemon"), 案例 net_kernel:start([NodeName, NodeType]) of {ok, _Pid} -> 节点() 结尾; CurrNode -> CurrNode 结尾。 stop_distrib()-> 网络内核:停止()。