NanoAの話ですが。
オフィシャルのcompile_errorはちゃんと動作するのだが、XREAではcompile_errorは動かない。
まあ、XREAはよいとしても、ローカル環境でも動かないのがとてもつらい。
CGI::ExceptionManagerがちゃんと働いていれば、コンパイル時のエラーも補足してくれるはずなのだが
。
と、思ってソースを見ていると、原因っぽいところがわかりました。
CGI::ExceptionManagerのoutputで、HTTPステータス500を出力していますが、そこの改行コードに問題があったようです。
「\r\n」になっているところを「\n」に変えてやるとちゃんとローカル環境でも動きました。
ただ、これがHTTP的に正しいのかどうかが少し疑問です。
と、思ったのですが。
先日変更したステータス302の出力は「\n」でやっていました。
とりあえず、extlibにあったCGI::ExceptionManager::StackTrace::CGIは以下のように変更しました。
Index: CGI.pm
===================================================================
--- CGI.pm (リビジョン 36612)
+++ CGI.pm (作業コピー)
@@ -8,9 +8,9 @@
warn $err->{message};
- print "Status: 500\r\n";
- print "Content-type: text/html; charset=utf-8\r\n";
- print "\r\n";
+ print "Status: 500\n";
+ print "Content-type: text/html; charset=utf-8\n";
+ print "\n";
my $body = $args{renderer} ? $args{renderer}->($err, %args) : $err->as_html(%args);
utf8::encode($body);
うーん。
ちゃんと動くようになって、なんだか、とってもスッキリしました。


コメントする