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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Apache2 IO write: (103) Software caused... 
:(
    Опции темы
infarch
Дата 6.11.2012, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Возникает странная ошибка на сервере у заказчика : Apache2 IO write: (103) Software caused connection abort at... 

Ни на девелоперских машинах под виндой, ни на тестовом сервере под убунтой такого нет. А вот в продукции периодически вылезает. Меня туда не пустят посмотреть, заказчик трясется как Кощей над яйцом. Так что приходится доходить эмпирически.

Вот функция в которой происходит ошибка:

Код

sub send_as_attachment {
    my ($path, $filename, $params) = @_;
    
    throw Exception::ScriptError( message => "File $path is not found" )
        unless -e $path && !-d $path;
    
    my $size = -s $path;
    
    my $mimetype = "application/octet-stream";
        my $disposition = 'attachment';
        my $printfilename = $filename;
    if(defined $params){
        $mimetype = $params->{file_type} if exists $params->{file_type};
        $disposition = $params->{disposition} if exists $params->{disposition};
        $printfilename = $params->{filename} if exists $params->{filename};
    }
    
    # open file
    open( INFILE, $path ) ||
        throw Backbone::Exception::ScriptError( message => "File $path could not be opened" );
    # print headers
    print "Content-Disposition: $disposition; filename=\"$printfilename\"\r\n";
    print "Content-Length: $size\r\n";
    print "Content-Type: $mimetype\r\n";
    print "Content-Transfer-Encoding: binary\r\n";
    print "Expires: 0\r\n\r\n";

    # send file
    binmode(INFILE);
    binmode(STDOUT);
    my $buffer;
    while ( read(INFILE, $buffer, 4096) ) {
        print $buffer; <-------------------------------------------- HERE
    }
    close(INFILE);
}



Я отметил строку на которой все падает. Еще в контроллере есть одна опция: binmode( STDOUT, ':encoding(utf8)' );
Добавлено для автоматического перекодирования в ютф8 при отправке контента. А эта функция отсылает файлы, поэтому и binmode(STDOUT); Может в этом и дело?

Однако, как я говорил, у меня все работает нормально... Помогите, знатоки, советами!

PM MAIL   Вверх
Pfailed
Дата 6.11.2012, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как это работает? Через  ModPerl::Registry?


--------------------
PM MAIL   Вверх
infarch
Дата 6.11.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, апач и модперл. Касаемо конфигурации, то вот:

Код

<VirtualHost *:80>
    
    DocumentRoot "C:/bb_projekt/VVS/webserver/htdocs/"
    
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    
    <Directory "c:/bb_projekt/VVS/webserver/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
        
    ScriptAlias /controller "c:/bb_projekt/VVS/webserver/cgi-shl/controller.pl"
    <Location /controller>
        SetHandler perl-script
        PerlResponseHandler ModPerl::Registry
        Options +ExecCGI
        PerlOptions +ParseHeaders
    </Location>

</VirtualHost>



Это с моей машины, а в продукции только пути отличаются.

PM MAIL   Вверх
Pfailed
Дата 6.11.2012, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну да, ModPerl::Registry - это такой костыль, который позволяет пускать CGI-подобные скрипты под mod_perl.
Не удивительно, что там могут происходить странные вещи. Советую погуглить по поводу STDOUT и ModPerl::Registry, Apache::Registry, mod_perl.
Вполне возможно что эти binmode влияют на STDOUT (который вроде бы tied) не должным образом.
Здесь есть что-то (хотя это про первый mod_perl) http://perl.apache.org/docs/1.0/guide/port..._STDERR_streams



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


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

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


 




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


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

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