Xmpp 埃贾伯德:妈妈抛出错误
我刚刚从支持MySQL的源代码(18.04)安装了ejabberd,并分别更改了配置文件。基本上一切正常:ejabberd启动,我可以注册用户,用户可以连接和发送消息。我还可以看到数据库中的所有用户,因此我假设设置到目前为止是正确的 现在我想使用modXmpp 埃贾伯德:妈妈抛出错误,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 ... 然而,当我发送一条脱
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一起工作,当时签名必须发送通知(从,到,数据包)并返回确定。
工作正常。如果您提供此答案,我可以接受。