ejabberd:mom_mam 抛出错误

ejabberd: mom_mam throws error

我刚刚从支持 MySQL 的源 (18.04) 安装了 ejabberd,并分别更改了配置文件。基本上一切正常:ejabberd 启动,我可以注册用户,用户可以连接并发送消息。我还看到了数据库中的所有用户,所以我认为到目前为止设置是正确的。

现在我想使用 mod mod_mam 来归档所有邮件。为此,我在 ejabberd.yaml 文件中添加了以下行:

modules:
  ...
  mod_mam:
    db_type: sql
    default: always
  ...

但是,当我发送离线消息时,出现以下错误 -- 实际上是两个使用离线消息挂钩的函数的类似错误:

[error] <0.541.0>@ejabberd_hooks:safe_apply:383 Hook offline_message_hook crashed when running mod_mam:offline_message/1: 
** Reason = {error,function_clause,[{mod_mam,offline_message,[{file,"src/mod_mam.erl"},{line,366}],[ok]},{ejabberd_hooks,safe_apply,[{file,"src/ejabberd_hooks.erl"},{line,380}],4},{ejabberd_hooks,run_fold1,[{file,"src/ejabberd_hooks.erl"},{line,364}],4},{ejabberd_sm,route,[{file,"src/ejabberd_sm.erl"},{line,143}],1},{ejabberd_local,route,[{file,"src/ejabberd_local.erl"},{line,73}],1},{ejabberd_router,do_route,[{file,"src/ejabberd_router.erl"},{line,368}],1},{ejabberd_router,route,[{file,"src/ejabberd_router.erl"},{line,93}],1},{ejabberd_c2s,check_privacy_then_route,[{file,"src/ejabberd_c2s.erl"},{line,823}],2}]}

使用较旧的安装 (17.01) 一切正常。但我不知道是否需要额外的 MySQL table。当我查看当前数据库时,实际上所有消息(包括离线消息)都存储在 table archive.

您是否仅使用 ejabberd 中包含的模块,或者您是否安装了任何贡献的模块或其他自定义模块?

注意在17.03中offline_message_hook从"run"(无累加器)变为"run_fold"(有累加器),这意味着将函数调用的结果传递给下一个一,直到全部完成或一停止钩子。

查看提交:https://github.com/processone/ejabberd/commit/e564f9ae31d2c5345be4eed66e70037ba8145dc1 和钩子文档:https://docs.ejabberd.im/developer/guide/#hooks