如何将Erlang Cassandra客户端文件包含到ejabberd服务器中?

3
我需要在我的ejabberd服务器中使用erlang cassandra客户端(https://github.com/iamaleksey/seestar)来记录消息,但是我可以单独运行seestar客户端。但是如果我将seestar文件包含到ejabberd src文件夹中,我会遇到一个function_clause错误。这个错误告诉我没有找到gen_server的call函数。请提供一些解决方案?
 The error when I debug the code is :
(ejabberd@localhost)1> seestar_session_tests:session_test_().
{foreach,#Fun<seestar_session_tests.0.112079720>,
         #Fun<seestar_session_tests.1.112079720>,
         [#Fun<seestar_session_tests.2.112079720>,
          #Fun<seestar_session_tests.3.112079720>,
          #Fun<seestar_session_tests.4.112079720>,
          #Fun<seestar_session_tests.5.112079720>]}
(ejabberd@localhost)2> seestar_session_tests:test_schema_queries(0.112079720).

** exception exit: {{function_clause,[{gen,call,
                                           [0.11207972,'$gen_call',
                                            {request,7,
                                                     <<0,0,0,95,67,82,69,65,84,69,32,75,69,89,83,80,...>>,
                                                     true},
                                            infinity],
                                           [{file,"gen.erl"},{line,146}]},
                                      {gen_server,call,3,[{file,"gen_server.erl"},{line,184}]},
                                      {seestar_session,request,3,
                                                       [{file,"seestar_session.erl"},{line,209}]},
                                      {seestar_session,perform,3,
                                                       [{file,"seestar_session.erl"},{line,156}]},
                                      {seestar_session_tests,test_schema_queries,1,
                                                             [{file,"seestar_session_tests.erl"},{line,33}]},
                                      {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,576}]},
                                      {shell,exprs,7,[{file,"shell.erl"},{line,668}]},
                                      {shell,eval_exprs,7,[{file,"shell.erl"},{line,623}]}]},
                    {gen_server,call,
                                [0.11207972,
                                 {request,7,
                                          <<0,0,0,95,67,82,69,65,84,69,32,75,69,89,83,80,65,67,69,
                                            ...>>,
                                          true},
                                 infinity]}}
     in function  gen_server:call/3 (gen_server.erl, line 188)
     in call from seestar_session:request/3 (seestar_session.erl, line 209)
     in call from seestar_session:perform/3 (seestar_session.erl, line 156)
     in call from seestar_session_tests:test_schema_queries/1 (seestar_session_tests.erl, line 33)

你能展示一下你收到的具体错误信息吗?你可以编辑问题并在那里添加它。 - legoscia
我已经更新了我的问题 legoscia。 - BABU K
2个回答

1

你不应该直接调用seestar_session_tests函数,而是通过Eunit库来调用。请尝试使用以下方法:

eunit:test(seestar_session_tests, [verbose]).

上述错误的确切原因是 seestar_session_tests:test_schema_queries 期望一个进程ID,而测试框架会提供它,但你却用浮点数调用它。
还可以通过Rebar从命令行调用Eunit测试。切换到seestar目录并运行rebar eunit

嗨,legoscia,感谢您的快速回复,您的解决方案很好用。再次感谢您的答案。 - BABU K

0

您可以使用基于Datastax官方Cpp驱动程序erlcass。 只需将其添加为rebar配置文件的依赖项即可进行集成:

{erlcass, ".*", {git,"https://github.com/silviucpp/erlcass.git",{tag,"v2.2"}}}

然后,在应用程序启动方法中初始化驱动程序,或者在app.config中使用以下选项:

{
    erlcass,
    [
        {
            cluster_options,
            [
                {contact_points,<<"127.0.0.1">>},
                {port,9042},
                {number_threads_io,4},
                {queue_size_io,128000},
                {max_connections_host,5},
                pending_requests_high_watermark,128000},
                {tcp_nodelay,true},
                {tcp_keepalive,{true,1800}},
                {keyspace,<<"keyspace_kere">>}
            ]
        }
    ]
}。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接