mod_perl × Catalyst でPOST時Apache2::RequestRecを取得できない
Catalystを最新にしたら、詰まった点があったのでメモします。
mod_perlでCatalystを動かしているのですが、今回Catalystを最新にしたらPOST時にエラーが出た。
Catalystのバージョンは5.90051(2013-11-07)です。
エラーの内容としては
POST or PUT 時に下のコードで Apach2::RequestRecではなく、FileHandleが返ってきて
Apacheのログをいじれないという内容である。
利用しているのこんなコード。
Catalyst.pmとか色々とCarp && Dumperして分からず、バージョンを下げたらエラーが出なくなっていた。
どうやら5.90049_004 DEVのアップデートが原因でした。
Changesを見てみると
たぶん下のやつが原因かなと思われる。
POST or PUT時はFileHandleにリセットされるそうです。
やったこと
Catalystのバージョンを下げる。
結論、脱mod_perlですね。頑張ります。
mod_perlでCatalystを動かしているのですが、今回Catalystを最新にしたらPOST時にエラーが出た。
Catalystのバージョンは5.90051(2013-11-07)です。
エラーの内容としては
POST or PUT 時に下のコードで Apach2::RequestRecではなく、FileHandleが返ってきて
Apacheのログをいじれないという内容である。
Caught exception in "Can't locate object method "user" via package "FileHandle"
利用しているのこんなコード。
if ( $ENV{ MOD_PERL } ) { my $r = $c->req->env->{'psgi.input'}; $r->user( $c->user->uid ); }
Catalyst.pmとか色々とCarp && Dumperして分からず、バージョンを下げたらエラーが出なくなっていた。
どうやら5.90049_004 DEVのアップデートが原因でした。
Changesを見てみると
たぶん下のやつが原因かなと思われる。
If incoming input (from a POST or PUT) is not buffered, create the buffer and set the correct psgi env keys to note this for downstream psgi apps / middleware. This should solve some issues where Catalyst sucks up the body input but its not buffered so downstream apps can't read it (for example FCGI does not buffer). We now also try to make sure the body content input is reset to the start of the filehandle so that we are polite to downstream middleware /apps.書いてありました。
POST or PUT時はFileHandleにリセットされるそうです。
やったこと
Catalystのバージョンを下げる。
結論、脱mod_perlですね。頑張ります。