middleware returns status as a string. Rack's interface does not specify that statuses must be ints, only that they respond to to_i. See Rack::Response for what it does. http://rack.rubyforge.org/doc/Rack/Response.html#M000202
cached on the client
This was causing all kinds of confusion since refreshing in the browser always caused a cache miss. People assumed that rack-cache wasn't working at all. The allow_reload and allow_revalidate options now default to false. This breaks with RFC 2616 but is the desired config in a majority of gateway cache scenarios.
To use GAE's memcache with rack-cache, set the :metastore and :entitystore options as follows: use Rack::Cache, :metastore => 'gae://cache-meta', :entitystore => 'gae://cache-body' The 'cache-meta' and 'cache-body' parts are memcache namespace prefixes and should be set to different values.