Railsアプリ+FastCGIでfcgi malformed header errorが出るのを直す

In: Ruby / Rails| technology

1 6月 2008

WEBRick(ローカル開発環境)で動いてたんだけど、FastCGI(サーバー運用環境)に置いてみたら、ApplicationErrorの画面(500 Error)が吐かれるよ、ってことが、たまにあります。

調べてみると、dispatch.fcgiは問題なくて、アプリのlogにもエラーも何も吐かれてなくて、サーバーのエラーログを見たら、


FastCGI: comm with server "/home/-user-/-websitepath-/public/dispatch.fcgi" aborted: error parsing headers: malformed header 'SET LAYOUT'

こんなのしかないんだけど、みたいな状況。

こういうとき、とりあえず、アプリをdevelopmentモードにして再起動させてみるのだけど、結果は変わらず。

こんなときの解決法メモ。


よくよく調べてみると、理由は単純明快。

そのアクションが、標準出力に何か書き込みをやらかそうとしている(もしくは、処理のどこかで何かに対して”puts”メソッドを走らせている)から。
したがって、対応としては、”puts”の部分を”logger.debug”に置換するか、いっそ、”puts”の処理を除去してしまえばよろしい。

と、一口に言っても、探すのはメンドイので、RAILS_ROOTの辺りでこんなコマンドを走らせてみるとよいです。

find . -name ‘*.rb’ -exec grep -q ‘puts’ ‘{}’ \; -print

これで、ソースの中に”puts”と書いてあるファイルを全部洗い出すことができます。

そのほかにも、pとかprintとか書いてあるのも怪しいので、putsと同様にしてしまうのがよいでしょう。
(とはいえ、pは探すの大変ですが……)

開発中は、デバッグをやりたいとかで、つい、pとかprintとかを乱発しがちで、消し忘れることが多いですね。
で、いざ運用する段になったら、原因不明で動かないように見えてしまう、と。
普段から、pとかは、使い終わったら消す習慣を身に着けたいものです。

Via:


Comment Form

About this blog

ゆるーく、ふわーっと、興味のままに。

自分のかたわらに置いておくメモ代わり。

Photostream