浏览器等待来自服务器的一些数据,只有在服务器重启后才进行日志记录。我也看到许多孩子是分叉的。
$ah{ $r->hostname } ||= HTML::Mason::ApacheHandler->new ( .. )
sub handle{
eval{ $ah{ $r->hostname }->handle_request($r); };
if( $@ ) {
$r->filename( $r->document_root . '/errors/500.html' );
$ah{ $r->hostname }->handle_request($r); };
$r->log_error( 'ERROR' );
}
}
我做错了什么,所以他们没有完成?
乌利希期刊指南我只发现了一个关于同样问题的说明:http://sourceforge.net/p/mason/mailman/message/14999444/但没有线索。
http://foertsch.name/ModPerl-Tricks/custom-content_type-with-custom_response.shtml
因此,我们没有将错误文本直接传递给custom_response,而是将其存储在pnotes中,并设置一个未使用的URI,例如/-/error,作为custom_response:sub handler {
my ($r)=@_;
@{$r->pnotes}{qw/etext ect/}=("sorry, no accessn", 'text/plain; charset=my-characters');
$r->custom_response( 403, "/-/error" );
return 403;
}
现在,我们需要配置/-/error来运行Perl处理程序:
<Location /-/error>
SetHandler modperl
PerlResponseHandler My::Error
</Location>
当然,我们还需要处理函数My::Error::handler:
sub handler {
my ($r)=@_;
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;
}
这个解决方案似乎有效,但我还不知道主要问题的答案:为什么请求没有完成?
乌利希期刊指南
这似乎是mod_perl2的一个bughttps://bz.apache.org/bugzilla/show_bug.cgi?id=57976
处理程序没有返回正确的值。另外,我不知道为什么你认为如果第一次导致错误,那么尝试第二次处理请求是一个好主意,所以我已经注释掉了。
sub handle{
my $result = eval{ $ah{ $r->hostname }->handle_request($r); };
if( $@ ) {
$r->filename( $r->document_root . '/errors/500.html' );
# $ah{ $r->hostname }->handle_request($r); };
$r->log_error( 'ERROR' );
}
return $result;
}