Erlang Supervisor 的 error:{badmatch,{error,{{start_spec,{invalid_modules, ??? }} 错误解决
新人,刚开始学习 erlang ,使用 rebar 生成了一个标准的 otp 应用程序,往 Supervisor 加了一个 gen_server ,却通不过默认单元测试了。提示
gamexg@vps1:~/erl/cw$ rebar compile eunit
==> cw (compile)
Compiled src/cw_dnode.erl
Compiled src/cw_sup.erl
Compiled src/cw_app.erl
==> cw (eunit)
=INFO REPORT==== 18-Apr-2011::14:53:47 ===
application: cw
exited: {{start_spec,{invalid_modules,cw_dnode}},
{cw_app,start,[normal,[]]}}
type: temporary
cw_app: simple_test (module 'cw_app')...*failed*
::error:{badmatch,{error,{{start_spec,{invalid_modules,cw_dnode}},
{cw_app,start,[normal,[]]}}}}
in function cw_app:simple_test/0
=======================================================
Failed: 1. Skipped: 0. Passed: 0.
Cover analysis: /home/gamexg/erl/cw/.eunit/index.html
ERROR: One or more eunit tests failed.
最后发现原因是回调模块应该是列表,我却直接把模块名填上了….
-module(cw_sup).
-behaviour(supervisor).
%% API
-export([start_link/0]).
%% Supervisor callbacks
-export([init/1]).
%% Helper macro for declaring children of supervisor
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).
%% ===================================================================
%% API functions
%% ===================================================================
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
%% ===================================================================
%% Supervisor callbacks
%% ===================================================================
init([]) ->
{ok, { {one_for_one, 5, 100},
[
{dnode,
{cw_dnode,start_link,[]},
permanent,
10000,
worker,
cw_dnode % 这里错了,应该是 [cw_dnode] ,是列表。
}
]
} }.