首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang OTP主管

Erlang OTP主管
EN

Stack Overflow用户
提问于 2011-11-03 16:30:55
回答 2查看 950关注 0票数 1

我正在编写“Erlang编程”一书中的练习12-2。我有一个模块db_server_otp,它实现了OTP gen_server行为。作为一个独立的模块,我已经测试了它,它按照预期工作。我现在必须为此增加一名主管。基于本章中的示例,我创建了一个模块db_server_sup,如下所示:

代码语言:javascript
复制
-module(db_server_sup).
-export([start/0,init/1]).
-behavior(supervisor).

start() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init(_Arguments) ->
    DbServerOtp = {db_server_otp,                %% Id
                   {db_server_otp, start, []},   %% child process
                   permanent,                    %% restart 
                   30000,                        %% shutdown (ms)
                   worker,                       %% type
                   {db_server_otp}},             %% required modules
    {ok, 
     {{one_for_all,           %% terminate all children and restart
       5,                     %% max of n restarts in MaxSeconds
       3600},                 %% MaxSeconds (s)
      [DbServerOtp]}}.        %% child process list

两个模块都位于同一个目录中,我用.beam文件编译了两个模块,它们位于我启动erlang的同一个工作目录中。然而,对于erlang外壳,我无法启动主管。

代码语言:javascript
复制
Erlang R13B03 (erts-5.7.4) [source] [64-bit] [smp:8:2] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.4  (abort with ^G)
1> c(db_server_otp).
./db_server_otp.erl:5: Warning: undefined callback function code_change/3 (behaviour 'gen_server')
./db_server_otp.erl:5: Warning: undefined callback function handle_info/2 (behaviour 'gen_server')
{ok,db_server_otp}
2> c(db_server_sup).
{ok,db_server_sup}
3> db_server_sup:start().
** exception exit: {start_spec,{invalid_modules,{db_server_otp}}}

我必须导入db_server_otp模块吗?如果是的话,我必须导入哪些功能?我正在导出db_server_otp中的所有OTP方法。

代码语言:javascript
复制
-module(db_server_otp).
-export([start/0,stop/0]).
-export([write/2,read/1,delete/1,match/1]).
-export([init/1,terminate/2,handle_cast/2,handle_call/3]).
-behavior(gen_server).
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-03 16:40:33

“必需模块”应该是一个列表,而不是元组。

试着使用:

代码语言:javascript
复制
DbServerOtp = {db_server_otp,                %% Id
               {db_server_otp, start, []},   %% child process
               permanent,                    %% restart 
               30000,                        %% shutdown (ms)
               worker,                       %% type
               [db_server_otp]},             %% required modules
票数 6
EN

Stack Overflow用户

发布于 2011-11-06 13:51:07

一个文体惯例:看到db_server_supdb_server_otp中的start函数都会创建链接,您应该称它们为start_link。这是一种普遍的惯例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7998466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档