Erlang 在ejabberd中创建自定义模块

Erlang 在ejabberd中创建自定义模块,erlang,Erlang,我已经在ejabberd中创建了自定义模块。主要问题是,如果我想在start(HOST)->函数中同时添加mysql和mnesia支持 IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, one_queue), Mod = gen_mod:db_mod(Host, Opts, ?MODULE), Mod:init(Host, Opts) 重新启动ejabberd后,会出现严重错误: 14

我已经在ejabberd中创建了自定义模块。主要问题是,如果我想在start(HOST)->函数中同时添加mysql和mnesia支持

IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1,
    one_queue),
  Mod = gen_mod:db_mod(Host, Opts, ?MODULE),
  Mod:init(Host, Opts)
重新启动ejabberd后,会出现严重错误:

14:05:26.453 [critical] Problem starting the module mod_conversation for host <<"localhost">> 
 options: []
 error: undef
[{mod_conversation_undefined,init,[<<"localhost">>,[]],[]},
 {mod_conversation,start,2,[{file,"src/mod_conversation.erl"},{line,30}]},
 {gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,154}]},
 {lists,foreach,2,[{file,"lists.erl"},{line,1337}]},
 {ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,77}]},
 {application_master,start_it_old,4,
                     [{file,"application_master.erl"},{line,273}]}]
14:05:26.453 [critical] ejabberd initialization was aborted because a module start failed.

Crash dump is being written to: //var/log/ejabberd/erl_crash_20170115-140523.dump...done
Problem starting the module mod_conversation for host <<"localhost">> 
 options: []
 error: undef
[{mod_conversation_undefined,init,[<<"localhost">>,[]],[]},
 {mod_conversation,start,2,[{file,"src/mo

我的模块成功启动。请帮助我解决此问题。

变量内容似乎是
Mod\u conversation\u undefined
。看看为什么
gen\u mod:db\u mod/3
返回
mod\u conversation\u undefined
变量内容似乎是
mod\u conversation\u undefined
。查看为什么
gen\u mod:db\u mod/3
返回
mod\u conversation\u undefined

如果要使用数据库后端,应该创建mod\u conversation\u$后端模块,例如mod\u conversation\u mnesia、mod\u conversation\u sql等。
您还应该在模块的mod_opt_type/1回调中添加“db_type”选项(否则任何后端都将被忽略,您将得到mod_conversation_未定义)。您可以查看在其他模块中是如何实现的,例如在简单的模块中,如mod_private。

如果您想使用数据库后端,您应该创建mod_conversation$后端模块,例如mod_conversation_mnesia、mod_conversation_sql等。
您还应该在模块的mod_opt_type/1回调中添加“db_type”选项(否则任何后端都将被忽略,您将得到mod_conversation_未定义)。你可以看看在其他模块中是如何实现的,例如在简单的模块中,如mod_private。

因此ejabberd不会猜测此模块使用的是哪个数据库,顺便说一下,我的默认db_类型是sql,其他ejabberd模块中也有相同的代码,所以我不明白为什么Mod变量是未定义的,所以ejabberd不知道这个模块使用哪个数据库,顺便说一句,我的默认db_类型是sql,在其他ejabberd模块中也有相同的代码,所以我不明白Mod变量是未定义的
Mod = gen_mod:db_mod(Host, Opts, ?MODULE),
Mod:init(Host, Opts)]