новости сообщество форум вики
Erlang по-русски. Форум » Erlang »

Проблема с MySQL

(5 posts)

  1. eugenevt
    Участник

    MySQL версия 5.1.40

    Драйвера от Yariv Sadan с

    Пытаюсь выполнить тест

    -module(testmysql).
    -compile(export_all).

    test() ->
    compile:file("/test/erlang/src/mysql.erl"),
    compile:file("/test/erlang/src/mysql_conn.erl"),

    %% Start the MySQL dispatcher and create the first connection
    %% to the database. 'p1' is the connection pool identifier.
    mysql:start_link(p1, "192.168.1.1", "bla", "bla-bla", "test"),

    %% Execute a query (using a binary)
    Result1 = mysql:fetch(p1, <<"SELECT * FROM listuser">>),
    io:format("Result1: ~p~n", [Result1]),

    ok.

    stop(_State) ->
    ok.

    В ответ получаю

    =ERROR REPORT==== 13-Feb-2010::04:46:50 ===
    Error in process <0.53.0> with exit value: {undef,[{mysql_recv,start_link,["192.168.1.1",3306,#Fun<mysql.0.8848228>,<0.53.0>]},{mysql_conn,init,9}]}

    mysql:502: failed starting first MySQL connection handler, exiting
    ** exception exit: {error,"timed out"}

    Из других клиентов проблем нет.
    Гугл не помог.

    Куда копать?
    Erlang только щупать начал.

    Отправлено 6 мес. назад #
  2. С mysql не работал, но...
    Сюда надо присмотреться внимательно:
    =ERROR REPORT==== 13-Feb-2010::04:46:50 ===
    Error in process <0.53.0> with exit value: {undef,[{mysql_recv,start_link,["192.168.1.1",3306,#Fun<mysql.0.8848228>,<0.53.0>]},{mysql_conn,init,9}]}

    Написано, что функция mysql_recv:start_link для параметров "192.168.1.1",3306,#Fun<mysql.0.8848228>,<0.53.0> не определена. Вызывается она где-то внутри модуля mysql в связи с вызовом mysql:start_link(p1, "192.168.1.1", "bla", "bla-bla", "test"). Скорее всего здесь параметры подставлены не правильные.

    Отправлено 6 мес. назад #
  3. Заглянул в сорцы mysql. С параметрами все ок, в другом дело...

    В начале функции test компилятся только модули mysql и mysql_conn. А надо бы и все остальные из пакета mysql, в частности mysql_auth и mysql_recv. Цепочка вызовов там такая: mysql:start_link() -> mysql_conn:start_link() -> mysql_recv:start_link().

    А зачем вообще mysql так компилировать, изнутри testmysql? Сделай это снаружи. В пакете mysql make-файл есть готовый.
    1. Скомпилируй mysql;
    2. Скомпилируй свой testmysql;
    3. Запусти эрланг;
    4. Выполни testmysql:test().
    И все дела :).

    testmysql.erl можно сократить до:

    -module(testmysql).
    -export([test/0]).

    test() ->
    mysql:start_link(p1, "192.168.1.1", "bla", "bla-bla", "test"),
    Result1 = mysql:fetch(p1, <<"SELECT * FROM listuser">>),
    io:format("Result1: ~p~n", [Result1]).

    Отправлено 6 мес. назад #
  4. eugenevt
    Участник

    Все было проще :-)

    Взял отсюда тестовый пример
    http://github.com/dizzyd/erlang-mysql-driver

    Заменил параметры БД на свои.
    Запустил.
    Результат - ошибка.
    :-)

    Про собрать или добавить все модули в тест не задумывался. Если там указано два модуля - видимо столько и нужно :-)
    Если слегка поворчать, то демонстрационный тест не должен таких упущений допускать.

    А так все заработало.

    Спасибо за помощь.

    Отправлено 6 мес. назад #
  5. Пожалуйста.
    Когда исходники выкладываешь, частенько приходит мысль еще что-то оптимизировать :), с фатальными последствиями. А потом кто-нибудь другой мучается, как мы здесь.

    Отправлено 6 мес. назад #

RSS экспорт этой темы

Отправить сообщение

Вы должны войти в систему, чтобы оставлять сообщения.

 
 

так же

Популярные тэги



Currently online

No Members around.

twitter