【问题标题】:How to create and compile a custom module in MongooseIM如何在 MongooseIM 中创建和编译自定义模块
【发布时间】:2018-12-19 15:50:15
【问题描述】:

系统信息:

MongooseIM 版本:3.0.0

安装自:pkg

Erlang/OTP 版本:18

Ubuntu 16.04

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

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

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

这是我的日志错误:

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

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

【问题讨论】:

  • 请不要将代码和错误消息作为屏幕截图发布。相反,将它们粘贴到您的问题中并使用{} 按钮将它们格式化为代码。请参阅 here 了解为什么这很重要。

标签: github module erlang ejabberd mongoose-im


【解决方案1】:

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


The link you posted 提示直接问题的答案:

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

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

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

更准确地说,假设我们从 mongooseim_3.0.0-1~ubuntu~artful_amd64.deb 安装了 MIM,可从 the Downloads page at erlang-solutions.com 获得,因此我们想要构建一个与 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").

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多