Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Ошибки в Perl при включение Gzip модуля в Apache


Автор: Dima85 27.11.2008, 11:36
Столкнулся с необъяснимой проблемой.
У меня выделенный Linux сервер, включая в Apache Gzip модуль, мои Perl скрипты начинают сходить сума, в случайных местах обрезается вывод данных, будь то html код или вывод какого-то текста. И что странно это не какой-то один определенный скрипт, это практически все написанный мною скрипты.
Подскажите в чем может быть дело. Сервер загружен как правело на 9-50%.
Сегодня просматривал лог файлы Apache ничего необычного не обнаружил. Может можно в Perl как-то вести логии запуска скриптов, что б понять как они работают и почему происходит эта ошибка?

Автор: sir_nuf_nuf 27.11.2008, 12:00
Dima85, скрипты - обычный CGI ?
Странно вообще, но попробуй отключить буфферизацию ($| = 1) или
перед выходом из скрипта делать STDOUT->flush();

Автор: Dima85 27.11.2008, 12:13
Это *.pl файлы. Вот один из них (немного урезаный):
Код

#!/usr/bin/perl
use strict;
use Fcntl ':flock';
use CGI::Carp qw/fatalsToBrowser/;
print "Content-type: text/html\n\n";

my $user = "/home/dima/egop/ul.text"; 

my @onuser = ();
open(USER, "< $user") or die "Can't open file user!\n";
flock(USER,LOCK_SH); 
while (<USER>) {
   s|!|              <li>|g;
   s|:|</li>|g;
   s|Gria|<small>Gria</small>|g;
   push @onuser, $_;
}
my $kluser = $.;
close (USER) or die "Can't close file user!\n";

print q~<ul id="ch-p1">@onuser</ul>~;


Расскажите пожалуйста немного подробней о STDOUT->flush(); и ($| = 1) я не силен в Perl.

Автор: sir_nuf_nuf 27.11.2008, 13:35
Код

#!/usr/bin/perl
use strict;
use Fcntl ':flock';
use CGI::Carp qw/fatalsToBrowser/;
print "Content-type: text/html\n\n";

my $user = "/home/dima/egop/ul.text"; 

my @onuser = ();
open(USER, "< $user") or die "Can't open file user!\n";
flock(USER,LOCK_SH); 
while (<USER>) {
   s|!|              <li>|g;
   s|:|</li>|g;
   s|Gria|<small>Gria</small>|g;
   push @onuser, $_;
}
my $kluser = $.;
close (USER) or die "Can't close file user!\n";

print q~<ul id="ch-p1">@onuser</ul>~;
STDOUT->flush();

Автор: Dima85 27.11.2008, 14:27
Не помогло. В чем еще может быть проблема? Может ему не нравиться то что многие файлы которые подгружают скрипты находиться вне каталога сервера? 

Автор: sir_nuf_nuf 27.11.2008, 14:43
Dima85, не от положения скриптов это никак не зависит. не гадай.
следующие вопросы:
1) я так понимаю используется mod_gzip ?
2) без zip компрессии все работает нормально ?
3) с zip компрессией статические файлы (простой html, css, jpg..) выдаются нормально ?

При запуске CGI скрипта (perl) - запускается отдельный процесс (интерпретатор perl),
и весь его вывод (STDOUT) через pipe направляется в апач.

Т.е. фактически apache читает данные не из файла, из pipe.
Но очевидно есть некоторые нюансы, и из-за этого глючит mod_gzip.

Вообщем я думаю это проблема конфигурации модулей и апача

Автор: Dima85 27.11.2008, 21:51
1.    Да, mod_gzip используется.
2.    Да.
3.    Как правело да.

Вобщем-то ответив на ваши вопросы, понял что нужно смотреть настройки Apache мода. Спасибо. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)