我刚刚从支持 MySQL 的源代码(18.04)安装了 ejabberd,并分别更改了配置文件。基本上一切正常:ejabberd 启动,我可以注册用户,用户可以连接和发送消息。我还看到数据库中的所有用户,所以我认为设置到目前为止是正确的。
现在我想使用 modmod_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 中archive
。