首页 > 解决方案 > 为 ejabberd 创建自定义模块时出错

问题描述

我在尝试为 ejabberd 创建自定义模块时遇到问题。

使用:
ejabberd 19.05.81(来自源)
ubuntu server 18.04

我按照https://docs.ejabberd.im/developer/extending-ejabberd/modules/的教程创建了 hello_world 模块

我尝试将源文件 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 安装时,它就在那里。

尽管如此,我还是遇到了同样的错误,如上所述。

有谁知道我做错了什么?

标签: modulexmppcustomizationejabberd

解决方案


我尝试将源文件 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) ->
    [].

推荐阅读