thinとunicornでrequest.bodyは全く違うので注意。
Rails内でrequest.bodyの扱いがHTTPサーバによって違ったのでメモ。
(id:secondlife さんからTwitter上で”thin / unicorn で異なるところに着目するより、rack.input を見てそれが異なってる、というところのほうが重要じゃないかな。" とアドバイス頂いたので、後日再エントリー書きます!)
環境
thin 1.3.1
unicorn 4.2.1
詳細
thinの場合
p request.body.class # => StringIO
unicornの場合
p request.body.class # => Rack::Lint::InputWrapper
上記の場合、引数にStringやStringIOを想定して実装しているメソッドでエラーになる。
thinに合わせるのなら、unicornでrequest.body.readにする必要がある。
p request.body.read.class # => String
これが正解。
[PR]Spreeの情報を集めています。
ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/