1

系统信息:

MongooseIM 版本:3.0.0

安装自:pkg

Erlang/OTP 版本:18

Ubuntu 16.04

我在为自定义模块创建标准基础时遇到问题。我想创建一个简单的 hello world 程序,如ejabberd 的文档中所述。

但是,我无法让它为 MongooseIM 工作。是否有关于如何执行此操作的说明?作为一个初学者,我只是在寻找构建自己的模块的构建块,而我所看到的一切对于我目前想要实现的目标来说都有些过于复杂。

这是我的模块的代码:(取自 ejabberd)https://docs.ejabberd.im/developer/extending-ejabberd/modules/#mod-hello-world

我的代码示例

这是我的日志错误:

错误日志

我在我的配置文件中添加了以下行以及所有其他正在运行的模块: {mod_hello_world, []}

我假设它与编译有关,并且没有为模块创建 .beam 文件以及特定于 MongooseIM 的一些语法错误。当使用预构建的 pkg 而不是从源代码安装时,我也不熟悉编译模块的文档。

4

1 回答 1

4

免责声明:我是一名为 Erlang Solutions 工作的 MongooseIM 开发人员。


您发布的链接暗示了直接问题的答案:

如果您从源代码编译 ejabberd,则可以将该源代码文件与所有其他 ejabberd 源代码文件一起复制,以便与它们一起编译和安装。如果您安装了一些已编译的 ejabberd 包,您可以创建自己的模块目录,请参阅管理您自己的模块。

MongooseIM (aka MIM) 不支持后一种管理模块的方法,即当从一个包中安装 MIM 并让它编译和运行模块时,不可能将源代码放到某个预定义的位置。如果我们想编写一个自定义模块,我们必须从源代码构建 MongooseIM

准确地说,我们不必从源代码构建整个服务器并自己打包。但是,我们必须克隆存储库,将新模块源放在那里(由于头文件等构建时间要求)并在那里构建它。一旦我们得到.beam新模块的文件,我们就可以将它放到已安装的 MongooseIM 的代码路径中。

更准确地说,假设我们已经从 erlang-solutions.com 的下载页面安装了 MIM mongooseim_3.0.0-1~ubuntu~artful_amd64.deb因此我们想要构建一个与 3.0.0 兼容的模块:

  1. 克隆 MIM:git clone https://github.com/esl/mongooseim
  2. cd mongooseim
  3. git checkout 3.0.0
  4. 放在mod_hello_world.erl下面./src/
  5. rebar3 compile
  6. rebar3完成后获取./_build/default/lib/mongooseim/mod_hello_world.beam并复制到我们从包中安装 MIM 的目标主机。

但请注意,直接取自 ejabberd 文档的示例在 MongooseIM 中可能无法“按原样”工作。例如,在这个简单的模块中,我们将无法包含logger.hrl,因为 MongooseIM 没有这样的头文件——我们必须这样做-include("mongoose_logger.hrl").

于 2018-07-12T10:06:06.710 回答