ejabberd模块开发

ejabberd模块开发

(金庆的专栏 2016.8)

参考:
https://docs.ejabberd.im/developer/modules/

运行
ejabberdctl modules_update_specs
会创建 C:\.ejabberd-modules\source\, 其中下载了
https://github.com/processone/ejabberd-contrib

可以同样在sources目录下创建自己的模块代码,如:
$HOME/.ejabberd-modules/sources/mod_mysupermodule/

运行
ejabberdctl module_check mod_mysupermodule
可检查该目录是否符合模块规定(policy), 如:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_check mod_mysupermodule
Error: [{missing,"COPYING"},
        {missing,"README.txt"},
        {missing,"src (Erlang) or lib (Elixir) sources directory"},
        {missing_meta,url},
        {missing_meta,home},
        {missing_meta,summary},
        {missing_meta,author}]


需要COPYING和README.txt文件,src目录。
还有 mod_mysupermodule.spec 文件,仿照其他模块的例子写就行了,例如:
url: "http://localhost"
summary: "My super m"
home: "http://localhost"
author: "Jin Qing"


可以查看到可用模块:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl modules_available
...
mod_mysupermodule       My super m
...


即使没有任何源文件,也可以module_install.
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule

ok


更改 src\mod_mysupermodule.erl 后,无法再次安装:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_install mod_mysupermodule

Error: conflict


好像可以用 module_upgrade:
C:\Program Files\ejabberd-16.08\bin>ejabberdctl module_upgrade mod_mysupermodule

src/mod_mysupermodule.erl:4: Warning: undefined callback function depends/2 (beh
aviour 'gen_mod')
src/mod_mysupermodule.erl:4: Warning: undefined callback function mod_opt_type/1
 (behaviour 'gen_mod')
ok

C:\Program Files\ejabberd-16.08\bin>


按文档说明,需要手工修改
C:\Users\jinqing\AppData\Roaming\ejabberd\conf\ejabberd.yml
实际测试配置不需要手工修改,只需要创建
C:\.ejabberd-modules\sources\mod_mysupermodule\conf\mod_mysupermodule.yml

modules:
  mod_mysupermodule: {}

按文件说明,需要手工复制编译生成的
C:\.ejabberd-modules\mod_mysupermodule

C:\Program Files\ejabberd-16.08\lib\mod_mysupermodule
 
查看代码,应该是会自动添加代码目录
C:\.ejabberd-modules\mod_mysupermodule\ebin

实际发现

2016-08-24 16:27:54.016 [critical] <0.550.0>@gen_mod:start_module:162 Problem starting the module mod_mysupermodule for host <<"zt-2203857">>
 options: []
 error: undef
[{mod_mysupermodule,start,[<<"zt-2203857">>,[]],[]},
 {gen_mod,start_module,3,[{file,"src/gen_mod.erl"},{line,154}]},
 {lists,foreach,2,[{file,"lists.erl"},{line,1337}]},
 {ejabberd_app,start,2,[{file,"src/ejabberd_app.erl"},{line,76}]},
 {application_master,start_it_old,4,
                     [{file,"application_master.erl"},{line,273}]}]
2016-08-24 16:27:54.016 [critical] <0.550.0>@gen_mod:maybe_halt_ejabberd:170 ejabberd initialization was aborted because a module start failed.


是Windows下还有问题。


需如下更改ext_mod.erl:
modules_dir() ->
    DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"),
-   getenv("CONTRIB_MODULES_PATH", DefaultDir).
+   getenv("CONTRIB_MODULES_PATH", filename:absname(DefaultDir)).


不然add_patha/1会失败:
code:add_patha("/.ejabberd-modules/mod_mysupermodule/ebin").

然后重启(可能不需要):
C:\Program Files\ejabberd-16.08\bin>ejabberdctl restart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值