尝试为ejabberd创建自定义模块时遇到问题。
使用:
ejabberd 19.05.81(来源)
ubuntu服务器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进行安装时,它在那里。
仍然,我遇到了与上述相同的错误。
有人知道我在做什么错吗?
答案 0 :(得分:1)
我尝试将源文件mod_hello_world.erl放入src中 文件夹,然后使用make install进行编译。一切顺利 但是,如果我在ejabberd.yml上添加模块,然后启动节点,则会得到一个 崩溃:
问题已确认。由于a recent commit,gen_mod需要ejabberd模块to export four functions。您使用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) ->
[].