[英]Rebar distributed tests
我在鋼筋下進行分布式測試時遇到一些問題。 鋼筋以名稱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}]}]}
但! 如果我以簡單的方式進行測試-一切正常:
$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
我怎樣才能解決這個問題?
\n\n -module(msg_proxy_tests)。\n\n -include_lib(“ eunit / include / eunit.hrl”)。\n\n distrib_mode_test _()->\n {“節點的分布式模式測試”,超時,60, \n fun()->\n {ok,主機} = inet:gethostname(),\n make_distrib(“ tests @” ++主機,簡稱),\n slave:start(主機,test1),\n ?debugVal(nodes()),\n spawn(list_to_atom(“ test1 @” ++ Host),fun()->?debugVal(node())結束),\n 計時器:睡眠(100), \n ?debugVal(nodes()),\n stop_distrib(),\n 好\n 結束}。\n\n -spec make_distrib(NodeName :: string()| atom(),NodeType :: shortnames | longnames)->\n {ok,ActualNodeName :: atom} | {錯誤,原因:: term()}。\n 當is_list(NodeName)-> make_distrib(NodeName,NodeType)\n make_distrib(erlang:list_to_atom(NodeName),NodeType);\n make_distrib(NodeName,NodeType)->\n 的case node()\n 'nonode @ nohost'-> \n [] = os:cmd(“ epmd -daemon”),\n net_kernel:start([NodeName,NodeType])的情況 \n {ok,_Pid}-> node() \n 結束;\n CurrNode-> CurrNode\n 結束。\n\n stop_distrib()->\n net_kernel:stop()。\n\n
這是因為兩個節點上的模塊哈希不同。 發生這種情況是因為eunit在運行之前會編譯代碼,並且模塊包含-ifdef(TEST)
宏,這肯定會更改其哈希值。
這就是為什么無法調用匿名函數#Fun<msg_proxy_tests.2.117197241
並發生錯誤的原因。 (查看函數名稱,您會注意到有趣的數字,這是模塊哈希,在兩個節點上都不同)。
如果要避免這種情況,則應使用完全限定的名稱來調用module:fun_name/arity
: module:fun_name/arity
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.