我对钢筋下的分布式测试有一些问题。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()->
网络内核:停止()。