parserALT
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →

Ошибка "mysql class is undefined"

#1lexR119
05.09.11 12:46
www.parser.ru → | ответить → | в избранное →

Ошибка "mysql class is undefined"

Добрый день!
Сайт был перенесен со сервера (freebsd) на новый (linux) и поставлена версия парсера 3.4.0
Появилась ошибка "mysql class is undefined"
В конфигурационном файле $CLASS_PATH и вызовы прописаны.

В чем может быть причина?
#2Sumo
→ lexR119 [#1] | 05.09.11 12:59
www.parser.ru → | ответить → | в избранное →

Не прописан use mysql.p

#3lexR119
→ Sumo [#2] | 05.09.11 13:16
www.parser.ru → | ответить → | в избранное →
Все прописано
@USE
mysql.p
lib.p
dtf.p
vote.p
antiflood.p
calendar.p
poll.p
sql.p

тем более, что раньше все работало
#4Sumo
→ lexR119 [#3] | 05.09.11 13:17
www.parser.ru → | ответить → | в избранное →

Проверьте пути к библиотекам, выполните явный ^use[/path/to/mysql.p], т.е. попытайтесь локализовать проблему.

#5Misha v.3
→ lexR119 [#3] | 05.09.11 13:22
www.parser.ru → | ответить → | в избранное →
"раньше работало" -- не аргумент, ведь вы что-то меняли :)

если бы не находился путь, то была-бы другая ошибка (о том, что не может быть найден файл).
в вашем случае скорее всего этот @USE не выполняется, т.к. если-бы он выполнялся, то класс был-бы определён.
#6lexR119
→ Misha v.3 [#5] | 05.09.11 13:25
www.parser.ru → | ответить → | в избранное →
Миша, добрый день! Почему он может не выполнятся? Поставил вызов ^use[/classes/mysql.p] - то же самое
#7lexR119
→ Sumo [#4] | 05.09.11 13:29
www.parser.ru → | ответить → | в избранное →
Поставил вызов ^use[/classes/mysql.p] - то же самое
#8Misha v.3
→ lexR119 [#6] | 05.09.11 13:33
www.parser.ru → | ответить → | в избранное →
@USE
mysql.p


и

^use[/classes/mysql.p]


-- две большие разницы (обратите внимание на начальный слэш).
почему у вас что-то не подключается я не знаю, т.к. чтобы что-то посоветовать надо знать где у вас что лежит.

P.S. простейший способ проверить подключается ли файл с классом: добавить в него метод @auto[] с ^throw[zzz;I'm working]
#9Sumo
→ lexR119 [#6] | 05.09.11 13:33
www.parser.ru → | ответить → | в избранное →

Содержимое вашего mysql.p покажите

#10lexR119
→ Sumo [#9] | 05.09.11 13:37
www.parser.ru → | ответить → | в избранное →
################################################################################################################################
# $Id: mysql.p,v 1.24 2005/03/02 10:38:30 misha Exp $
################################################################################################################################


@CLASS
mysql

@USE
sql.p

@BASE
sql



###########################################################################
@auto[]
$server_name[mysql]
#end @auto[]



###########################################################################
@init[connect-string;params]
^BASE:init[$connect-string;$params]
#end @init[]



###########################################################################
###########################################################################
# РАБОТА С ДАТАМИ

###########################################################################
@today[]
$result[CURDATE()]
#end @today[]


###########################################################################
@now[]
$result[NOW()]
#end @now[]


###########################################################################
@year[source]
$result[YEAR($source)]
#end @year[]


###########################################################################
@month[source]
$result[MONTH($source)]
#end @month[]


###########################################################################
@day[source]
$result[DATE_FORMAT($source,'%d')]
#end @day[]


###########################################################################
@ymd[source]
$result[DATE_FORMAT($source,'%Y-%m-%d')]
#end @ymd[]


###########################################################################
@date_diff[t;dt_from;dt_to]
$result[^if(def $dt_to){TO_DAYS($dt_to)}{^now[]} - TO_DAYS($dt_from)]
#end @date_diff[]


###########################################################################
@date_sub[date;days]
$result[DATE_SUB(^if(def $date){$date}{^today[]},INTERVAL $days DAY)]
#end @date_sub[]


# функции, имеющие аналоги не во всех серверах
###########################################################################
#----- не работает, заменителя не знаю
@date_add[date;days]
$result[]
#end @date_add[]


###########################################################################
# нету у MSSQL
@date_format[source;format_string]
$result[DATE_FORMAT($source, '^if(def $format_string){$format_string}{%Y-%m-%d}')]
#end @date_format[]



###########################################################################
# РАБОТА С LAST_INSERT_ID()

###########################################################################
@last_insert_id[table]
$result(^int:sql{SELECT DISTINCT last_insert_id() FROM $table}[$.default{0}])
#end @last_insert_id[]


###########################################################################
@set_last_insert_id[table;field]
$result(^last_insert_id[$table])
^void:sql{UPDATE $table SET ^if(def $field){$field}{sort_order} = $result WHERE ${table}_id = $result}
#end @set_last_insert_id[]



###########################################################################
###########################################################################
# РАБОТА СО СТРОКАМИ

###########################################################################
@substring[source;pos;length]
$result[SUBSTRING($source,^if(def $pos){$pos}{1},^if(def $length){$length}{1})]
#end @substring[]


###########################################################################
@upper[field]
$result[UPPER($field)]
#end @upper[]


###########################################################################
@lower[field]
$result[LOWER($field)]
#end @lower[]


###########################################################################
@concat[params]
$result[CONCAT($params)]
#end @concat[]



###########################################################################
###########################################################################
# РАЗНОЕ

###########################################################################
@password[pass]
$result[PASSWORD($pass)]
#end @password[]


###########################################################################
@left_join[type;table;join_conditions;last]
^if(^type.lower[] eq "from"){
	$result[LEFT JOIN $table ON ($join_conditions)]
}{
	$result[1 = 1 ^if(!def $last){ AND}]
}
#end @left_join[]



###########################################################################
# перекрываем заглушку для того, чтобы для каждого запроса получать explain информацию
@_get_query_detail[type;query;sql_options][eres;cols]
^if(def $query && $type ne "void"){
	^try{
		$eres[^table::sql{explain $query}[^if($sql_options is "hash"){^if($sql_options.offset){$.offset($sql_options.offset)}^if($sql_options.limit){$.limit($sql_options.limit)}}]]
		$cols[^eres.columns[]]
		$result[EXPLAIN:^#0A^cols.menu{$cols.column}[^#09]^#0A^eres.menu{^cols.menu{$eres.[$cols.column]}[^#09]}[^#0A]]
	}{
		$result[]
		$exception.handled(1)
	}
}{
	$result[]
}
#end @_get_query_detail[]

#11Sumo
→ lexR119 [#10] | 05.09.11 13:58
www.parser.ru → | ответить → | в избранное →

«Ошибка "mysql class is undefined"»

#12lexR119
→ Misha v.3 [#8] | 05.09.11 14:05
www.parser.ru → | ответить → | в избранное →
в конфигурационном файле
$CLASS_PATH[^table::create{path
/classes/
}]

в корне
@USE
mysql.p
lib.p
dtf.p
vote.p
antiflood.p
calendar.p
poll.p
sql.p

Все файлы с классами лежат в папке classes
#13Maxx
→ lexR119 [#6] | 05.09.11 14:15 / 14:16
www.parser.ru → | ответить → | в избранное →
>> ^use[/classes/mysql.p]
В каком файле и секции конкретно вы это прописали? приведите значимый кусочек этого файла
#14lexR119
→ Maxx [#13] | 05.09.11 14:19 / 14:21
www.parser.ru → | ответить → | в избранное →
@auto[]
$MAIN:pSQL[^mysql::init[mysql://www@localhost/base;
$.is_debug(1)
$.sCacheDir[/data/sql_cache]
]]
^use[/classes/mysql.p]

@USE
mysql.p
lib.p
dtf.p
vote.p
antiflood.p
calendar.p
poll.p
sql.p
#15Maxx
→ lexR119 [#14] | 05.09.11 14:26
www.parser.ru → | ответить → | в избранное →

;) поставьте ^use[] ДО вызова конструктора класса mysql

#16lexR119
→ Maxx [#15] | 05.09.11 14:27
www.parser.ru → | ответить → | в избранное →
то же самое
#17Maxx
→ lexR119 [#16] | 05.09.11 14:35
www.parser.ru → | ответить → | в избранное →
Что-то сказочное. use не ругается, значит файл находит, а класс тем не менее undefined.

Вы не написали в каком именно файле у вас этот код прописан
#18lexR119
→ Maxx [#17] | 05.09.11 14:40
www.parser.ru → | ответить → | в избранное →
в корневом auto.p
#19Maxx
→ lexR119 [#18] | 05.09.11 14:43
www.parser.ru → | ответить → | в избранное →
А полностью текст ошибки можете привести?
#20lexR119
→ Maxx [#19] | 05.09.11 14:44
www.parser.ru → | ответить → | в избранное →
[Mon Sep 5 14:33:01 2011] [28354] /: 'mysql' class is undefined [parser.runtime] [uri=/, method=GET, cl=0]
#21lexR119
→ lexR119 [#1] | 05.09.11 14:46
www.parser.ru → | ответить → | в избранное →
Может ли быть проблема в сборке парсера? Или настройках сервера?
#22Maxx
→ lexR119 [#20] | 05.09.11 14:47
www.parser.ru → | ответить → | в избранное →
Варианты кончились... если дадите доступ к серверу - могу посмотреть
#23Maxx
→ lexR119 [#20] | 05.09.11 14:57
www.parser.ru → | ответить → | в избранное →

об ошибке

у меня такая ошибка выглядит явно по другому:
[Mon Sep 05 14:25:10 2011] [2840] /test/my/: путь/index.html(5:8): 'mysql' class is undefined [parser.runtime] [uri=/test/my/, method=GET, cl=0]


У вас случайно вызов конструктора mysql в конфигурационном auto.p не прописан?
#24lexR119
→ Maxx [#23] | 05.09.11 15:01
www.parser.ru → | ответить → | в избранное →
Странно. Путь находится, если удалить файл mysql.p, то пишет, что он не найден...

Что касается конфигурационного:
@conf[filespec]
$confdir[^file:dirname[$filespec]]
$charsetsdir[$confdir/charsets]
$sqldriversdir[$confdir/lib]

$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	libmysqlclient.so
sqlite	$sqldriversdir/libparser3sqlite.so	sqlite3.so
pgsql	$sqldriversdir/libparser3pgsql.so	libpq.so
oracle	$sqldriversdir/libparser3oracle.so	/u01/app/oracle/product/8.1.5/lib/libclntsh.so?ORACLE_HOME=/u01/app/oracle/product/8.1.5&ORA_NLS33=/u01/app/oracle/product/8.1.5/ocommon/nls/admin/data
}]
]

#for ^file::load[name;user-name] mime-type autodetection
$MIME-TYPES[^table::create{ext	mime-type
zip	application/zip
doc	application/msword
xls	application/vnd.ms-excel
pdf	application/pdf
ppt	application/powerpoint
rtf	application/rtf
gif	image/gif
jpg	image/jpeg
png	image/png
tif	image/tiff
html	text/html
htm	text/html
txt	text/plain
mts	application/metastream
mid	audio/midi
midi	audio/midi
mp3	audio/mpeg
ram	audio/x-pn-realaudio
rpm	audio/x-pn-realaudio-plugin
ra	audio/x-realaudio
wav	audio/x-wav
au	audio/basic
mpg	video/mpeg
avi	video/x-msvideo
mov	video/quicktime
swf	application/x-shockwave-flash
}]

$CLASS_PATH[^table::create{path
/classes/
}]

$LIMITS[
	$.post_max_size(10*0x400*0x400)
]	

@fatal_error[title;subtitle;body]
$response:status(500)
$response:content-type[
	$.value[text/html]
	$.charset[$response:charset]
]

<html>
<head><title>$title</title></head>
<body>
<h1>^if(def $subtitle){$subtitle;$title}</h1>
$body
#for [x] MSIE friendly
^for[i](0;512/8){<!-- -->}
</body>
</html>

@unhandled_exception_debug[exception;stack]
^fatal_error[Unhandled Exception^if(def $exception.type){ ($exception.type)};$exception.source;
<pre>^untaint[html]{$exception.comment}</pre>
^if(def $exception.file){
^untaint[html]{<tt>$exception.file^(${exception.lineno}:$exception.colno^)</tt>}
}
^if($stack){
	<hr/>
	<table>
	^stack.menu{
		<tr><td>$stack.name</td><td><tt>$stack.file^(${stack.lineno}:$stack.colno^)</tt></td></tr>
	}
	</table>
}
]

@unhandled_exception_release[exception;stack]
^fatal_error[Unhandled Exception;;

<p>The server encountered an unhandled exception 
and was unable to complete your request.</p>
<p>Please contact the server administrator, $env:SERVER_ADMIN
and inform them of the time the error occurred, 
and anything you might have done that may have caused the error.</p>
<p>More information about this error may be available in the Parser error log
or in debug version of unhandled_exception.</p>

]

@unhandled_exception[exception;stack]
#use debug version to see problem details
^unhandled_exception_release[$exception;$stack]
^unhandled_exception_debug[$exception;$stack]


@auto[]
#source/client charsets
$request:charset[windows-1251]
$response:charset[windows-1251]

$response:content-type[
	$.value[text/html]
	$.charset[$response:charset]
]

# mysql 3.xx & 4.0
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251_koi8]
# mysql 4.1 and higher
#$SQL.connect-string[mysql://user:pass@host/db?charset=cp1251]
#$SQL.connect-string[sqlite://db]
#$SQL.connect-string[pgsql://user:pass@host/db]
#$SQL.connect-string[oracle://user:pass@service?NLS_LANG=RUSSIAN_AMERICA.CL8MSWIN1251&NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS]

#25Misha v.3
→ lexR119 [#12] | 05.09.11 15:03
www.parser.ru → | ответить → | в избранное →

моё предыдущее сообщение пробовали прочитать полностью, включая PS?

#26lexR119
→ Misha v.3 [#25] | 05.09.11 15:08
www.parser.ru → | ответить → | в избранное →
Миша, если удалить файл mysql.p, то пишет, что по файл не найден. Т.е. файл по указанному в $CLASS_PATH пути ищется.

При добавлении ^throw[zzz;I'm working] в @auto[] - ничего не выдает, все та же ошибка. Получается, что класс не подключается...
#27Misha v.3
→ lexR119 [#26] | 05.09.11 15:25
www.parser.ru → | ответить → | в избранное →
тогда не представляю что может быть.

- версия linux-а?
- парсер сами собирали?
- можно увидеть результаты работы _test.html?
#28moko
→ lexR119 [#26] | 05.09.11 15:29
www.parser.ru → | ответить → | в избранное →

сколько у вас файлов mysql.p?

Возможно их несколько, причем в остальных класс mysql не определен.
А при переезде файлы были записаны в другом порядке, и теперь ищутся тоже в другом порядке.
#29lexR119
→ Misha v.3 [#27] | 05.09.11 15:30
www.parser.ru → | ответить → | в избранное →
1. centos 5 32bit
2. Да
3. [Mon Sep 5 15:26:17 2011] [28627] /_test.html: 'mysql' class is undefined [parser.runtime] [uri=/_test.html, method=GET, cl=0]
#30lexR119
→ moko [#28] | 05.09.11 15:31
www.parser.ru → | ответить → | в избранное →
Один, в папке /classes/
#31Maxx
→ Misha v.3 [#27] | 05.09.11 15:36
www.parser.ru → | ответить → | в избранное →
Миша, а по какой причине парсер может не писать номер строки в которой случилась ошибка runtime?
#32Misha v.3
→ lexR119 [#29] | 05.09.11 15:43
www.parser.ru → | ответить → | в избранное →
- попробуйте собранный нами
- то, что вы привели -- это запись из error.log, а не результаты работы _test.html
#33Misha v.3
→ moko [#28] | 05.09.11 15:44
www.parser.ru → | ответить → | в избранное →

imho, тогда не было-бы ругани при временном удалении файла mysql.p

#34lexR119
→ Misha v.3 [#32] | 05.09.11 15:55
www.parser.ru → | ответить → | в избранное →
1. Не нашел у вас сборку под centos 5 32bit, можно ссылочку
2. В смысле выдает то же сообщение "mysql class is undefined"
#35Maxx
→ lexR119 [#34] | 05.09.11 16:07
www.parser.ru → | ответить → | в избранное →
Миша имеет ввиду, что нужен вывод _test.html
Переименуйте времено auto.p в другое имя или закоментируйте его содержимое, чтобы парсер не падал на этой ошибке и обратитесь к тестовому файлу, результат приведите сюда.
#36lexR119
→ Misha v.3 [#32] | 05.09.11 16:14
www.parser.ru → | ответить → | в избранное →
http://old.easttime.info/_test.html
#37Misha v.3
→ lexR119 [#36] | 05.09.11 16:53 / 06.09.11 07:57
www.parser.ru → | ответить → | в избранное →
1. если посмотреть на вывод таблицы $SQL.drivers, то можно заметить, что для протокола mysql строка в таблице некорректная. скорее всего кто-то между "mysql" и "./lib/libparser3mysql.so" написал пробел вместо символа табуляции. но я не знаю, как это может влиять на возникающую у вас ошибку (хотя из-за этого вы с mysql сервером работать не сможете).

2. у нас не находится файл клиентской библиотеки mysql: /usr/lib/mysql/libmysqlclient.so.15 (не найден) -- проверьте, что он есть по указанному пути.

3. если ещё внимательнее посмотреть на результат вывода _test.html и на «Ошибка "mysql class is undefined"», то можно заметить, что пути к библиотекам не идентичны (в приведённом вами коде написано "libmysqlclient.so", а тестовый файл показывает "/usr/lib/mysql/libmysqlclient.so.15"). т.е. похоже, что вы не в курсе, где-же на самом деле живёт ваш конфигурационный auto.p и показываете нам что-то другое.

4. определите в конфигурационном auto.p переменную $SQL.connect-string, чтобы тестовый файл попробовал проверить работу с SQL сервером.

5. смысл вызова и unhandled_exception_release и unhandled_exception_debug мне непонятен. надо вызывать ИЛИ один (на рабочем сервере) ИЛИ другой (на сервере разработке или для вас по IP)

6. попробуйте взять нашу сборку для RedHat

P.S. вообщем у вас только в конфигурационном файле достаточно косяков, чтобы запутать кого угодно. предлагаю скачать ещё раз выложенный нами конфигурационный файл, исправить в нём только пути к драйверу и библиотеке, CLASS_PATH, определить SQL.connect-string, закомментировать вызов unhandled_exception_release и раскомментировать вызов unhandled_exception_debug. сделать всё это внимательно и аккуратно. после этого ещё раз временно переименовать корневой auto.p и ещё раз показать результаты работы _test.html
#38Misha v.3
→ Maxx [#31] | 06.09.11 07:33 / 07:43
www.parser.ru → | ответить → | в избранное →

не знаю :)

судя по исходникам, если есть exception.source и stack trace -- то пытается вывестись сообщение об ошибке. если его нет -- информации о месте возникновения ошибки недоступна.
#39Maxx
→ lexR119 [#21] | 08.09.11 18:41
www.parser.ru → | ответить → | в избранное →

Решили проблему?

а то _test.html уже без ошибок вроде
#40lexR119
→ Maxx [#39] | 09.09.11 09:23
www.parser.ru → | ответить → | в избранное →
Да, всем большое спасибо. Оказалось все проще - при переносе база была сохранена не в той кодировке.
Страницы форума: ← Назад | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 600 | Дальше →