Erlang 钢筋分布试验

Erlang 钢筋分布试验,erlang,rebar,Erlang,Rebar,我对钢筋下的分布式测试有一些问题。 钢筋以名称nonode@nohost。之后,我调用帮助函数make_distrib,该函数提供正常的节点名称并开始分发工作。 启动从属节点后,我无法向其发送任何lambda。我有个错误: =ERROR REPORT==== 27-Jul-2013::22:48:02 === Error in process on node 'test1@just' with exit value: {{badfun,#Fun<msg_proxy_tests.2

我对钢筋下的分布式测试有一些问题。 钢筋以名称<代码>nonode@nohost。之后,我调用帮助函数
make_distrib
,该函数提供正常的节点名称并开始分发工作。
启动从属节点后,我无法向其发送任何lambda。我有个错误:

=ERROR REPORT==== 27-Jul-2013::22:48:02 === Error in process on node 'test1@just' with exit value: {{badfun,#Fun<msg_proxy_tests.2.117197241>},[{error_handler,undefined_lambda,3,[{file,"error_handler.erl"},{line,64}]}]} =错误报告===2013年7月27日::22:48:02=== 节点“”上的进程出错test1@just'的退出值:{{badfun,{Fun},[{error\u handler,undefined\u lambda,3,[{file,“error\u handler.erl”},{line,64}]} 但是!如果我用简单的方法运行它的测试-一切正常:

$erl 1> c(msg_proxy_tests). {ok,msg_proxy_tests} 2> eunit:test({module, msg_proxy_tests},[verbose]). ======================== EUnit ======================== module 'msg_proxy_tests'msg_proxy_tests: distrib_mode_test_ (distribute mode test for nodes)... msg_proxy_tests.erl:14:<0.48.0>: nodes ( ) = [test1@just] msg_proxy_tests.erl:15:<9999.39.0>: node ( ) = test1@just msg_proxy_tests.erl:17:<0.48.0>: nodes ( ) = [test1@just] [0.238 s] ok $erl 1> c(msg_代理_测试)。 {好的,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::nodes()=[test1@just] msg_proxy_tests.erl:15::node()=test1@just msg_proxy_tests.erl:17::nodes()=[test1@just] [0.238s]好的 如何解决此问题?
模块来源:

-module(msg_proxy_tests). -include_lib("eunit/include/eunit.hrl"). distrib_mode_test_()-> {"distribute mode test for nodes", timeout, 60, fun() -> {ok, Host} = inet:gethostname(), make_distrib("tests@"++Host, shortnames), slave:start(Host, test1), ?debugVal(nodes()), spawn(list_to_atom("test1@"++Host), fun()-> ?debugVal(node()) end), timer:sleep(100), ?debugVal(nodes()), stop_distrib(), ok end}. -spec make_distrib( NodeName::string()|atom(), NodeType::shortnames | longnames) -> {ok, ActualNodeName::atom} | {error, Reason::term()}. make_distrib(NodeName, NodeType) when is_list(NodeName) -> make_distrib(erlang:list_to_atom(NodeName), NodeType); make_distrib(NodeName, NodeType) -> case node() of 'nonode@nohost' -> [] = os:cmd("epmd -daemon"), case net_kernel:start([NodeName, NodeType]) of {ok, _Pid} -> node() end; CurrNode -> CurrNode end. stop_distrib()-> net_kernel:stop(). -模块(消息代理测试)。 -include_lib(“eunit/include/eunit.hrl”)。 分发模式测试()-> {“节点分布式模式测试”,超时,60, 乐趣()-> {ok,Host}=inet:gethostname(), 制作发行版(“测试@”++主机,简称), 从机:启动(主机,测试1), ?debugVal(节点()), 生成(从列表到原子(“test1@”++主机),fun()->?debugVal(node())结束), 定时器:睡眠(100), ?debugVal(节点()), 停止分发(), 好啊 结束}。 -spec make_distrib(NodeName::string()| atom(),NodeType::shortnames | longnames)-> {ok,ActualNodeName::atom}{error,Reason::term()}。 当是列表(节点名)时生成分发(节点名、节点类型)-> 制作发行版(erlang:list-to-atom(NodeName),NodeType); 制作发行版(节点名称、节点类型)-> 的案例节点() 'nonode@nohost' -> []=os:cmd(“epmd-daemon”), case net_内核:的开始([NodeName,NodeType]) {ok,_Pid}->node() 结束; CurrNode->CurrNode 结束。 停止分发()-> net_内核:stop()。
这是因为两个节点上的模块哈希不同。这是因为eunit在运行之前编译代码,并且模块包含
-ifdef(TEST)
宏,这肯定会改变它的哈希值

这就是为什么匿名函数
#有趣的原因