如何在erlang中运行模块

时间:2018-03-20 00:44:29

标签: erlang ejabberd

我在 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

1 个答案:

答案 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 **配置文件中注册了