![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
UncleAndy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.12.2010 Репутация: нет Всего: нет |
Система CentOS - apache 2.2.3+mod_perl 2.0.4, perl 5.8.8 штатные.
Для сайта использую Template Toolkit 2.22 В непредсказуемые моменты один или несколько процессов httpd (отследил через $$) начинают вести себя странно. У меня есть процедура которая обрабатывает данные и выдает шаблоны - do_template($apache_rec, $karkas, $params, $only_return). Параметры - переменная apache request из mod_perl, имя шаблона, параметры шаблона, флаг определяющий что делать с результатом компиляции шаблона - если 0 - сразу выводить, если 1 - возвращать его. Для отладки понаставил строк типа open(LOG, '>>/tmp/dbg.log'); print LOG 'do_template: 0', "\n"; close(LOG); и дождался глюка. Результат поставил меня в тупик. Во время глюков процедура, которая вызывает данную отрабатывает нормально, а вот запись в лог из самой процедуры (ставил строку даже перед получением параметров процедуры) НЕ происходит. Кроме того, при последнем параметра = 1 производится странное действие, такое как будто этот параметр == 0. Процедура возвращает 1 и выводит шаблон в STDOUT. В чудеса я не верю, но не могу понять в чем проблема. Если навскидку не распознаете ситуацию, подскажите хотя-бы какими средствами можно ее попробовать отладить. |
|||
|
||||
Leshak |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
ситуация знакомая - неоднократно попадал в такое однозначно определить причину не смогу, но это может происходить из-за разного если не путаю - то дольше всего искал причину оказавшейся пропущенным знаком препинания запятой или точкой с запятой.. из моих любимых ошибок: - корявость в регулярном выражении - неаккуратность с глобальными/локальными данными - в том числе - ошибки в именах! в таких случаях мне помогают - отладочные выводы после каждой строки кода - заглушки - заново переписать код вот... Успехов |
|||
|
||||
UncleAndy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.12.2010 Репутация: нет Всего: нет |
Пока нашел только путаницу с именами переменных. Внутри процедуры использовал локальную переменную с таким-же именем как и глобальная. Пока грешу на это. Буду смотреть повториться-ли ошибка.
|
|||
|
||||
srl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Хм-м, эта фраза наводит на размышления. Осознаёшь ли ты, чем работа скрипта под mod_perl отличается от обычного CGI? Так же, осознаёшь ли ты, что по дефолту запущено несколько процессов веб-сервера, и каждый из них может выполнять разные версии скрипта (пока ты вносишь изменения, не перезапуская веб-сервер)? |
|||
|
||||
UncleAndy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 29.12.2010 Репутация: нет Всего: нет |
Осознаю конечно. С такими скриптами несколько лет работал на довольно крупном проекте. Просто сейчас совсем уж непонятное происходит (если не учитывать то что нашел дублирование имен переменных). Кстати, еще такой вопрос, связанный с предыдущим. Если у меня есть две версии сайта - основная и тестовая и в них используется библиотека подключаемая по required, не может-ли их апачь путать из-за того что у них одно имя package (но находятся они в разных каталогах). Может это конечно и ложная тревога, но последние глюки натолкнули на эту мысль. |
|||
|
||||
srl |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 16.1.2011 Репутация: нет Всего: нет |
Эх, и всё-таки не понимаешь ты, как работает mod_perl, даже не смотря на опыт. 8)) При чём тут вообще апач?.. "Путать" будет. Как только модуль загрузится в первый раз - его название появится в хеше %INC, и при следующем HTTP-запросе (учитывая, что процесс mod_perl'а остаётся в памяти) интерпретатор увидит, что у него этот модуль уже загружен, и этот модуль заново читать и компилировать уже не станет. Смени хендлер запросов на PerlRun и посмотри, есть ли ошибки. Это сообщение отредактировал(а) srl - 20.1.2011, 07:27 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |