Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная ошибка, Не огу определить откуда она берется 
:(
    Опции темы
UncleAndy
Дата 12.1.2011, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.

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

PM MAIL   Вверх
Leshak
Дата 13.1.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 19.10.2005

Репутация: нет
Всего: нет



Цитата(UncleAndy @  12.1.2011,  00:12 Найти цитируемый пост)
В чудеса я не верю


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

в таких случаях мне помогают 
- отладочные выводы после каждой строки кода
- заглушки 
- заново переписать код

вот...
Успехов
PM MAIL   Вверх
UncleAndy
Дата 13.1.2011, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2010

Репутация: нет
Всего: нет



Пока нашел только путаницу с именами переменных. Внутри процедуры использовал локальную переменную с таким-же именем как и глобальная. Пока грешу на это. Буду смотреть повториться-ли ошибка.
PM MAIL   Вверх
srl
Дата 17.1.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(UncleAndy @ 12.1.2011,  00:12)
Кроме того, при последнем параметра = 1 производится странное действие, такое как будто этот параметр == 0.

Хм-м, эта фраза наводит на размышления.

Осознаёшь ли ты, чем работа скрипта под mod_perl отличается от обычного CGI? Так же, осознаёшь ли ты, что по дефолту запущено несколько процессов веб-сервера, и каждый из них может выполнять разные версии скрипта (пока ты вносишь изменения, не перезапуская веб-сервер)?
PM MAIL   Вверх
UncleAndy
Дата 17.1.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 29.12.2010

Репутация: нет
Всего: нет



Цитата(srl @ 17.1.2011,  00:02)
Осознаёшь ли ты, чем работа скрипта под mod_perl отличается от обычного CGI? Так же, осознаёшь ли ты, что по дефолту запущено несколько процессов веб-сервера, и каждый из них может выполнять разные версии скрипта (пока ты вносишь изменения, не перезапуская веб-сервер)?

Осознаю конечно. С такими скриптами несколько лет работал на довольно крупном проекте. Просто сейчас совсем уж непонятное происходит (если не учитывать то что нашел дублирование имен переменных).

Кстати, еще такой вопрос, связанный с предыдущим.

Если у меня есть две версии сайта - основная и тестовая и в них используется библиотека подключаемая по required, не может-ли их апачь путать из-за того что у них одно имя package (но находятся они в разных каталогах). Может это конечно и ложная тревога, но последние глюки натолкнули на эту мысль.
PM MAIL   Вверх
srl
Дата 20.1.2011, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 16.1.2011

Репутация: нет
Всего: нет



Цитата(UncleAndy @  17.1.2011,  11:11 Найти цитируемый пост)
Если у меня есть две версии сайта - основная и тестовая и в них используется библиотека подключаемая по required, не может-ли их апачь путать из-за того что у них одно имя package (но находятся они в разных каталогах). Может это конечно и ложная тревога, но последние глюки натолкнули на эту мысль. 


Эх, и всё-таки не понимаешь ты, как работает mod_perl, даже не смотря на опыт. 8))
При чём тут вообще апач?..
"Путать" будет. Как только модуль загрузится в первый раз - его название появится в хеше %INC, и при следующем HTTP-запросе (учитывая, что процесс mod_perl'а остаётся в памяти) интерпретатор увидит, что у него этот модуль уже загружен, и этот модуль заново читать и компилировать уже не станет.

Смени хендлер запросов на PerlRun и посмотри, есть ли ошибки.

Это сообщение отредактировал(а) srl - 20.1.2011, 07:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1023 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.