WEBrick uses IO#read to process POST requests, but it hangs because IO#read chops off the first character, making WEBrick wait for that character, and never getting it. A work-around is to use recv instead:
class TCPSocket; def read size; recv size; end; end
http://gist.github.com/111988