Ошибка при создании пользовательского модуля для ejabberd - PullRequest
0 голосов
/ 27 июня 2019

У меня проблемы при попытке создать пользовательские модули для ejabberd.

Использование:
ejabberd 19.05.81 (из источника)
Ubuntu Server 18.04

Я создал модуль hello_world, следуя инструкции https://docs.ejabberd.im/developer/extending-ejabberd/modules/

Я попытался поместить исходный файл mod_hello_world.erl в папку src, а затем скомпилировать его с помощью make install. Все идет гладко, но если я добавляю модуль в ejabberd.yml, затем запускаю узел, я получаю сбой:

19: 59: 43.683 [критический] Не удалось запустить приложение ejabberd: недопустимое значение дополнительных модулей: 'mod_hello_world' не является модулем ejabberd

Я попытался использовать папку $ HOME / .ejabberd-modules / sources и команду ejabberdctl module_install mod_hello_world, и при проверке, была ли она установлена ​​с помощью modules_installed, она там есть.

Тем не менее, я получаю ту же ошибку, описанную выше.

Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 28 июня 2019

Я попытался поместить исходный файл mod_hello_world.erl в src папку, а затем скомпилирован с помощью make install. Все идет гладко, но если я добавлю модуль в ejabberd.yml, то начну узел, я получу авария:

Проблема подтверждена. Поскольку недавний коммит , gen_mod требует, чтобы модули ejabberd экспортировали четыре функции . Страница документации, которую вы нашли с исходным кодом mod_hello_world, еще не обновлена, поэтому ejabberd жалуется, что не распознает модуль erlang как модуль ejabberd. Спасибо за упоминание этого!

Я обновил исходный код документации, но, полагаю, он не будет обновляться онлайн со следующего выпуска. Этот обновленный исходный код работает правильно, пожалуйста, попробуйте:

-module(mod_hello_world).

-behaviour(gen_mod).

%% Required by ?INFO_MSG macros
-include("logger.hrl").

%% gen_mod API callbacks
-export([start/2, stop/1, mod_options/1, depends/2]).

start(_Host, _Opts) ->
    ?INFO_MSG("Hello, ejabberd world!", []),
    ok.

stop(_Host) ->
    ?INFO_MSG("Bye bye, ejabberd world!", []),
    ok.

depends(_Host, _Opts) ->
    [].

mod_options(_Host) ->
    [].
...