我在 ejabberd / src中有一个模块R.unapply(R.transpose)
helloworld.erl
如何将其注册到 /etc/ejabberd/ejabberd.yml ?语法是什么?
以下尝试:
-module(helloworld).
%% API
-export([start/0]).
start() ->
% Chat
ejabberd_auth:try_register(<<"username">>, <<"example.com">>, <<"secret_password">>).
引发错误:
erl
c(helloworld).
hellworld:start().
我该如何解决?这样做的正确方法是什么,以便我可以成功呼叫** exception error: undefined function jid:nodeprep/1
in function ejabberd_auth:validate_credentials/3 (src/ejabberd_auth.erl, line 796)
in call from ejabberd_auth:try_register/3 (src/ejabberd_auth.erl, line 251)
?
提前谢谢大家。
ejabberd.yml
ejabberd_auth:try_register
答案 0 :(得分:0)
老问题。但是,让我试着解释你的问题。在报告shell错误时,
异常错误:未定义的函数jid:nodeprep / 1 在函数ejabberd_auth中:validate_credentials / 3(src / ejabberd_auth.erl,第796行) 来自ejabberd_auth的电话:try_register / 3(src / ejabberd_auth.erl,第251行)
这是因为erlang可以在任何代码路径中找到 jid 模块。 代码路径我的意思是,erlang在启动时搜索加载模块(梁文件)的目录。当您通常执行 erl 时,erlang会将当前目录(从命令所在的位置)添加到其代码路径中。由于与 ejabberd_auth 相关联的 jid.beam 不存在或存在任何其他原因,因此会抛出该异常。
现在回答你的问题:
如何将其注册到/etc/ejabberd/ejabberd.yml?语法是什么?
将您的模块添加到模块列表字段中:
modules:mod_adhoc:{}
确保遵循相同的缩进规则。我确定YAML文件解析器会在没有遵守的情况下抛出错误。
我该如何解决?这样做的正确方法是什么,以便我可以成功调用ejabberd_auth:try_register?
要解决此问题,必须将 ejabberd_auth 模块以及通过 try_register / 3 调用直接或可传输访问的所有模块添加到代码路径中。您可以使用 erl 命令的 -pa 标记执行此操作:
erl -pa ./path-to-ejabberd-ebin-folder
在erl
了解详情然而, ejabberd 是一个不仅仅是图书馆的应用程序。它有许多其他需要的依赖,并说明设置( mnesia表,...... )。 即使 jid 模块已解决,也可能发生其他问题。我建议启动ejabberd作为应用程序。如果你这样做,ejabberd会自动启动你的模块,因为你在* ejabberd.yml **配置文件中注册了