为什么第二次请求没有完成输出



浏览器等待来自服务器的一些数据,只有在服务器重启后才进行日志记录。我也看到许多孩子是分叉的。

$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;
}

相关内容

  • 没有找到相关文章

最新更新