I've actually been really bugged about the rewindable requirement since it was introduced.

I like a variant of James' proposal, which would work like this:

env["rack.input"] must either be an IO that, when #read, returns the full input.

This would mean that if you #read from a non-rewindable input, you should put a StringIO in place with the read data. If you read a rewindable input, you should rewind it.

Yehuda Katz
Developer | Engine Yard
(ph) 718.877.1325


On Tue, Feb 23, 2010 at 3:30 PM, Hongli Lai <hongli@phusion.nl> wrote:
On Feb 23, 3:30 am, James Tucker <jftuc...@gmail.com> wrote:
> Block. This change just takes us further from async support, but it seems there's a need.

Does it really break async support? It should be possible to support
async even when #size is supported, async frameworks/apps just musn't
call #size.