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] ,是列表。
            }
        ]
       } }.

No comment »