【问题标题】:Rebar distributed tests钢筋分布式测试
【发布时间】:2013-07-27 22:01:31
【问题描述】:

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

=错误报告==== 2013 年 7 月 27 日::22:48:02 === 节点“test1@just”上的进程出错,退出值:{{badfun,#Fun},[{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:: 节点 () = [test1@just] msg_proxy_tests.erl:15:: 节点 () = test1@just msg_proxy_tests.erl:17:: 节点 () = [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()-> 网络内核:停止()。

【问题讨论】:

    标签: erlang rebar


    【解决方案1】:

    那是因为两个节点上的模块哈希值不同。发生这种情况是因为 eunit 在运行之前编译代码并且模块包含 -ifdef(TEST) 宏,这肯定会改变它的哈希值。

    这就是为什么无法调用匿名函数#Fun<msg_proxy_tests.2.117197241 并发生错误的原因。 (看看函数名,你会注意到有趣的数字,这是模块哈希,在两个节点上会有所不同)。

    如果你想避免这种情况,你应该用它的完全限定名称来调用 funs:module:fun_name/arity

    【讨论】:

      猜你喜欢
      • 2016-08-05
      • 2017-05-22
      • 2016-08-28
      • 2012-06-26
      • 2012-10-15
      • 2012-04-28
      • 2012-05-24
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多