2013-11-29 5 views
3

Мне нужно использовать клиент erlang cassandra (https://github.com/iamaleksey/seestar) на моем сервере ejabberd для ведения журнала сообщений. Но я могу запускать клиент seestar отдельно. Но если я включаю файлы seestar в папку ejabberd src, я столкнулся с ошибкой function_clause. Эта ошибка не сообщает Функция вызова gen_server найдена. Предложите некоторое решение?Как добавить файлы клиента erlang cassandra в ejabberd-сервер?

The error when I debug the code is : 
([email protected])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>]} 
([email protected])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) 
+0

Может вам показать точное сообщение об ошибке, которое вы получаете? Вы можете отредактировать вопрос и добавить его туда. – legoscia

+0

Я обновил свой вопрос legoscia. –

ответ

1

Вы не должны вызывать функции в seestar_session_tests непосредственно, но через библиотеку Eunit. Попробуйте вместо этого:

eunit:test(seestar_session_tests, [verbose]). 

(. Точная причина выше ошибок в том, что seestar_session_tests:test_schema_queries ожидает PID, который тест рамка дала бы, но вы вызываете его с числом с плавающей точкой)

Тесты Eunit также могут быть вызваны из линии Commond через Rebar. Перейдите в каталог seestar и запустите rebar eunit.

+0

Привет, legoscia, Спасибо за быстрый ответ, и ваше решение сработало хорошо. Еще раз спасибо за ваш ответ. –

0

Вы можете использовать erlcass, который основан на Datastax Official Cpp driver. Интегрировать просто добавить его в качестве отд к вашему арматурной конфигурационный файл:

{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">>} 
      ] 
     } 
    ] 
}. 
Смежные вопросы