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