Xmpp 埃贾伯德:妈妈抛出错误

Xmpp 埃贾伯德:妈妈抛出错误,xmpp,ejabberd,ejabberd-module,ejabberd-hooks,Xmpp,Ejabberd,Ejabberd Module,Ejabberd Hooks,我刚刚从支持MySQL的源代码(18.04)安装了ejabberd,并分别更改了配置文件。基本上一切正常:ejabberd启动,我可以注册用户,用户可以连接和发送消息。我还可以看到数据库中的所有用户,因此我假设设置到目前为止是正确的 现在我想使用modmod_mam来归档所有消息。为此,我在ejabberd.yaml文件中添加了以下行: modules: ... mod_mam: db_type: sql default: always ... 然而,当我发送一条脱

我刚刚从支持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}]}
[错误]@ejabberd\u hooks:safe\u apply:383 Hook offline\u message\u Hook在运行mod\u mam:offline\u message时崩溃/1:
**{线,366},,[ok]},{错误,函数.原因..错误,功能...原因.原因.原因.原因.原因..原因..原因.原因.原因..原因..原因....原因....错误.错误,功能.函数.错误.错误,功能,功能,安全.应用,安全.应用,安全.应用,{{文件文件,模模模.模.模.模.模.模..模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模.模,1},{ejabberd_local,route,[{file,“src/ejabberd_local.erl”},{line,73}],1},{ejabberd_路由器,do_路由,[{file,{src/ejabberd_router.erl},{line,368}],1},{ejabberd_路由器,路由,[{file,{src/ejabberd_router.erl},{line,93}],1},{ejabberd_c2s,检查隐私,然后{erlu route,{line,file,},src/ejabberd.ejabberd,2},{

在较旧的安装(17.01)中,一切正常。但我不知道是否需要额外的MySQL表。当我查看当前数据库时,我实际上看到了所有消息(包括脱机消息)存储在表
存档中

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

请注意,脱机_消息_hook在17.03中从“run”(不带累加器)更改为“run_fold”(带累加器),这意味着函数调用的结果将传递到下一个函数,直到所有函数完成或一个函数停止钩子

请参阅提交:
和钩子文档:

您是否只使用ejabberd中包含的模块,或者是否安装了任何已贡献的模块或其他自定义模块?您的问题引导我朝着正确的方向前进。我有自己的模块使用该钩子。在脱机消息的情况下,
函数会发送通知({Action,Packet}=Acc)
被调用。但是,我返回的是
ok。
如果我返回的是
Acc.
,一切似乎都正常。因此我假设我必须将输入传递给下一个模块(只是猜测,我对ejabberd/erlang不太熟悉)。我确信我的模块与ejabberd 17.01一起工作,当时签名必须发送通知(从,到,数据包)并返回
确定。
工作正常。如果您提供此答案,我可以接受。