Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[apache-talk] Странное поведение mod _perl



Возникла у меня такая проблема:

Имеется достаточно сложная система скриптов на mod_perl, в которой
Perl*Handler вешаются на самые различные стадии запроса
(в частности PerlTransHandler и PerlFixupHandler, а отдачей контента
занимается либо PerlSSI, либо Registry скрипты).

При этом в Fixup-хэндлере для PerlSSI-страниц создается объект CGI,
который живет в глобальной переменной модуля, и используется в
соответствующих вызовах <!--#perl sub.

Некоторое время все это жило и каши не просило, но вдруг (после
глобального переписывания) был замечен такой эффект, что 
нечто (как правило параметр запроса) переживает текущий http запрос
и в результате если Registry скрипт случайно обрабатывается копией httpd
где все это живет, поведение его совершенно непредсказуемо.

При этом вполне существует CleanupHandler, который undef-ит все глобальные
переменные моих модулей.

CGI в FixUp хэндлере создается следующим образом:
sub FixUp {
my $r = shift;
local %ENV = $r->cgi_env;
&init_context;

}

sub init_context {
 @Module::CGI[0]=new CGI;
 ... много разной другой инициализации
}

Попытка заменить local %ENV
на 
my %oldenv = %ENV;
%ENV = $r->cgi_env;
&init_context
%ENV=%oldenv

положение сильно не улучшила. 
Особые проблемы вызывает скрипт с multipart-формой, точнее с двумя формами
- одной get, второй multipart.

Из скрипта вызывается та же самая функция init_context, но с
использованием того Environment, который предоставляет Registry.

Поведение устойчивое. Пробовались Apache 1.3.4 и 1.3.6 mod_perl 1.16_01 и
1.19 в разных конфигурациях.

У кого нибудь есть какие-нибудь идеи?

Да, кстати. В Apache 1.2 была опция -x которая заставляла сервер
работать в foreground и без форканья, что сильно упрощало отладку подобных
вещей. В 1.3.4 и 1,3.6 сие куда-то испарилось.
--------------------------------------------------
Victor Wagner			vitus@xxxxxx
Programmer			Office:7-(095)-964-0380
Institute for Commerce 		Home: 7-(095)-135-46-61
Engineering                     http://www.ice.ru/~vitus

=============================================================================
=               Apache-Talk@xxxxxxxxxxxxx mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =






Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.