Собрал я парсер из исходников. конфиг файл лежит /etc/parser3 (при сборке указал --sysconfdir=/etc/parser3 отдельно собрал libparser3mysql положил в /usr/lib/parser3
фрагмент основного конфига @conf[filespec] $confdir[/etc/parser3] $charsetsdir[/usr/share/parser3/charsets] $sqldriversdir[/usr/lib/parser3]
$CHARSETS[ # $.koi8-r[$charsetsdir/koi8-r.cfg] # $.windows-1250[$charsetsdir/windows-1250.cfg] $.windows-1251[$charsetsdir/windows-1251.cfg] # $.windows-1257[$charsetsdir/windows-1257.cfg] ] #change your client libraries paths to those on your system $SQL[ $.drivers[^table::create{protocol driver client mysql $sqldriversdir/libparser3mysql.so /usr/lib/libmysqlclient.so.15 #pgsql $sqldriversdir/libparser3pgsql.so /usr/lib/libpq.so.5 #sqlite $sqldriversdir/libparser3sqlite.so /usr/lib/libsqlite3.so.0 #oracle $sqldriversdir/libparser3oracle.so -configure could not guess- }] ]
однако ругается: /: /srv/http/ewsite/html/auto.p(47:2): 'mysql://ewsite:ewsite@127.0.0.1/ewsite?charset=cp1251_koi8' $SQL:drivers table must be defined [parser.runtime]
как определить подключилась ли mysql библиотека или нет.
не подключился конфигурационный auto.p с определением $SQL (фрагмент которого вы приводите)
P.S. лично я даже не знаю что такое sysconfdir %-). и у меня есть подозрение, что он парсером не используется. предлагаю вам собрать без этой опции, конфигурационный auto.p положить рядом с бинарником (это конфиг _сайта_, в нём должны быть вещи специфичные для сайта), а файлы кодировок и драйвера положить куда вам больше нравится, указав путь к ним в этом конфигурационном auto.p (именно так, как вы это сделали сейчас)
Откуда по умолчанию Parser3 пытается прочитать глобальный конфиг? Дело в том что у нас auto.p есть для сайта и есть auto.p общий (в котором как раз описаны подключаемые модули).
imho: что-то у вас неверно собралось. почему -- я не знаю. почему не подключается обработчиком некорректно собранное -- гадать конечно можно, но думаю не стоит. мне кажется, в начале надо получить нормально собранный бинарник.
Вы меня конечно простите, но это писец какое убийство собирать парсер. делаешь все по мануалу а результат через жопу. (накипело). Так и придется переделывать сайт на нормальном движке с php
согласен, скачать и запустить один buildall -- "писец какой-то"
и по мануалу-ли была сборка? что-то... Откуда по умолчанию Parser3 пытается прочитать глобальный конфиг?
Скачайте архив «Конфигурационный файл и файлы описания кодировок» и распакуйте его в каталог, с CGI скриптом.
конфигурационный файл считывается из файла, заданного переменной окружения CGI_PARSER_CONFIG, Если переменная не задана, ищется в том же каталоге, где расположен сам CGI скрипт.
вы безусловно профессионал, но мы -- любители, и мысли читать не можем ("а что собираете-то?", "Какую конкретно ошибку?"). если что-то не понятно -- мы спрашиваем. если не отвечают (а например просто прыгяют с одной проблемы на другую) -- помочь не можем (хотя мне кажется, что мы попытались).
- вы так и не ответили на вопрос "что вы собирали?". перефразирую: какую версию исходников вы брали и где вы её брали? (надо: брать 3.4.0, не раньше, из cvs или из архива с сайта)
- вы писали и про configure и про buildall. я не знаю как вы это всё перемешивали. надо: распаковать, запустить. если что-то подправляли и хотите пересобрать: make distclean и опять buildall...
- после сборки неплохо прогнать тесты: cd tests; make tests
- увы, 64-битные версии у нас появились совсем недавно. возможны баги, которые мы старались исправить и на используемых нами ОС исправили. возможно где-то они остались, но пока нам о них не сообщат -- мы о них не знаем и исправить не можем.
Соответственно нужен будет ssh, слать на moko@design.ru. Можем посмотреть и сами, что не так, но это уже в течении недели (под рукой 64-х битной убунты нужной версии нет).
Одна "мелочь", которую Андрей забыл сообщить - это то, что ранее сайт работал на парсере версии 3.3.0. :) Соответственно все починилось после замены ^process{$code} на ^process{^untaint{$code}}. Но не исключено, что что-нибудь еще поломалось...
А вот это похоже несовместимость с GCC 4.4.3 (или с libc)
Program terminated with signal 11, Segmentation fault. (gdb) bt #0 0x00007f8ff97e435e in vfprintf () from /lib/libc.so.6 #1 0x00007f8ff9807682 in vsnprintf () from /lib/libc.so.6 #2 0x000000000040ae53 in __vsnprintf (b=0x7fff7f61c3f0 "Parser/", s=1023, f=0x552a17 "Parser/%s", l=0x7fff7f61c840) at pa_common.C:945 #3 0x0000000000406772 in die_or_abort (fmt=0x552a17 "Parser/%s", args=0x7fff7f61c840, write_core=false) at parser3.C:164 #4 0x00000000004068e0 in SAPI::die (fmt=0x552a17 "Parser/%s") at parser3.C:201 #5 0x0000000000406e17 in real_parser_handler (filespec_to_process=0x7fff7f61dc10 "", request_method=0x7fff7f61ff47 "GET", header_only=false) at parser3.C:382 #6 0x000000000040785f in main (argc=1, argv=0x7fff7f61e138) at parser3.C:754
Более-менее разобрался, в чем дело - внутри die_or_abort мы сначала вызываем log, который тоже вызывает vsnprintf. А в доке написано так:
The functions vprintf(), vfprintf(), vsprintf(), vsnprintf() are equivalent to the functions printf(), fprintf(), sprintf(), snprintf(), respectively, except that they are called with a va_list instead of a variable number of arguments. These functions do not call the va_end macro. Because they invoke the va_arg macro, the value of ap is undefined after the call. See stdarg(3).
В общем непонятно, почему только сейчас вылезло. :)