2017-01-15 6 views
0

Я создал собственный модуль в ejabberd. Главная проблема заключается в том, что если я хочу, чтобы добавить как MySQL и Mnesia поддержку в начале (HOST) -> функцияСоздание пользовательского модуля в ejabberd

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 

Я уже добавить новый модуль в файле конфигурации ejabberd. если я удалю

Mod = gen_mod:db_mod(Host, Opts, ?MODULE), 
Mod:init(Host, Opts)] 

мой модуль запускается успешно. Пожалуйста, помогите мне решить эту проблему.

ответ

0

Mod переменная содержание похоже mod_conversation_undefined. Посмотрите, почему gen_mod:db_mod/3 возвращает mod_conversation_undefined.

+0

поэтому ejabberd не догадывается, какая база данных используется этим модулем, кстати, мой db_type по умолчанию - это sql, также есть один и тот же код в других модулях ejabberd, поэтому я не понимаю, почему переменная Mod undefined –

0

Если вы хотите использовать базы данных, вы должны создать модули mod_conversation_ $ BACKEND, например. mod_conversation_mnesia, mod_conversation_sql и т. д. Вы также должны добавить опцию 'db_type' для mod_opt_type/1 обратного вызова вашего модуля (в противном случае любые серверы будут проигнорированы, и вы получите mod_conversation_undefined). Вы можете посмотреть, как это делается в других модулях, например, в простых, например mod_private.

 Смежные вопросы

  • Нет связанных вопросов^_^