如何在MongooseIM中创建和编译自定义模块

时间:2018-07-11 14:37:37

标签: github module erlang ejabberd mongoose-im

系统信息:

  

MongooseIM版本:3.0.0

     

安装自:pkg

     

Erlang / OTP版本:18

     

Ubuntu 16.04

我无法为自定义模块创建标准库。我想创建一个documentation for ejabberd中概述的简单的hello world程序。

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

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

My code sample

这是我的日志错误:

Error Log

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

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

1 个答案:

答案 0 :(得分:2)

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


The link you posted提示了当前问题的答案:

  

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

MongooseIM(又称MIM)不支持后者的模块管理方法,即从软件包中安装MIM并使其仅编译并运行模块时,就不可能将源代码放到某些预定义的位置。如果要编写自定义模块,则必须build MongooseIM from source

确切地说,我们不必从源代码构建整个服务器并自行打包。但是,我们必须克隆存储库,将新的模块源放置在此处(由于建立时间要求,例如头文件),然后在此处进行构建。一旦获得了新模块的func alltextField() { for sview in scrollView.subviews { if sview is UITextField, let textField = sview as? UITextField { print(textField.text ?? "") } } } 文件,我们就可以将其放入已安装的MongooseIM的代码路径中。

更精确地说,假设我们从the Downloads page at erlang-solutions.com.beam安装了MIM,因此我们要构建与3.0.0兼容的模块:

  1. 克隆MIM:mongooseim_3.0.0-1~ubuntu~artful_amd64.deb
  2. git clone https://github.com/esl/mongooseim
  3. cd mongooseim
  4. git checkout 3.0.0放在mod_hello_world.erl
  5. ./src/
  6. rebar3 compile完成后rebar3并复制到我们从软件包中安装MIM的目标主机。

但是请注意,直接从ejabberd文档获取的示例在MongooseIM中可能无法“按原样”运行。例如,在这个简单的模块中,我们将无法包含./_build/default/lib/mongooseim/mod_hello_world.beam,因为MongooseIM没有这样的头文件-我们将不得不logger.hrl