2015-05-22 13 views
0

Браузер ждет некоторых данных с сервера, и ведение журнала выполняется только после перезапуска сервера. Также я вижу, что дети могут раздвоить.Почему второй запрос не заканчивается?

$ah{ $r->hostname } ||= HTML::Mason::ApacheHandler->new (..) 

sub handle{ 
    eval{ $ah{ $r->hostname }->handle_request($r); }; 
    if([email protected]) { 
    $r->filename($r->document_root . '/errors/500.html'); 
    $ah{ $r->hostname }->handle_request($r); }; 
    $r->log_error('ERROR'); 
    } 
} 

Что я делаю неправильно, так что они еще не закончены?

UPD я нашел только одну ноту о той же проблеме: http://sourceforge.net/p/mason/mailman/message/14999444/ но без подсказки.

ответ

1

http://foertsch.name/ModPerl-Tricks/custom-content_type-with-custom_response.shtml

Таким образом, вместо передачи текста ошибки непосредственно custom_response мы храним его в PNotes и установить в противном случае неиспользованный URI, скажем/-/ошибка, так как custom_response:

sub handler { 
    my ($r)[email protected]_; 
    @{$r->pnotes}{qw/etext ect/}=("sorry, no access\n", 'text/plain; charset=my-characters'); 
    $r->custom_response(403, "/-/error"); 
    return 403; 
} 

Теперь, нам нужно настроить/-/ошибку для запуска обработчика Perl:

<Location /-/error> 
    SetHandler modperl 
    PerlResponseHandler My::Error 
</Location> 

И, конечно, нам нужна функция обработчика, My :: Error :: обработчик:

sub handler { 
    my ($r)[email protected]_; 
    return Apache2::Const::NOT_FOUND unless $r->prev; 
    $r->content_type($r->prev->pnotes->{ect}); 
    $r->print($r->prev->pnotes->{etext}); 
    return Apache2::Const::OK; 
} 

Это решение работает, но я не знаю ответа от основного вопроса: почему запрос не закончен?

UPD

Это кажется ошибка с mod_perl2 https://bz.apache.org/bugzilla/show_bug.cgi?id=57976

0

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

sub handle{ 
    my $result = eval{ $ah{ $r->hostname }->handle_request($r); }; 
    if([email protected]) { 
     $r->filename($r->document_root . '/errors/500.html'); 
     # $ah{ $r->hostname }->handle_request($r); }; 
     $r->log_error('ERROR'); 
    } 
    return $result; 
} 
+0

Фактически я возвращаю результат в код моего происхождения. Я делаю второй запрос, потому что хочу выполнить дополнительные действия. Теперь я сохраняю данные в комментариях и делаю internal_redirect вместо handle_request –

Смежные вопросы