Oh I totally agree that a proper API in Rack would be better for this. But I thought the problem is precisely that there isn't one?
I can see that Rack already knows whether the response is "chunked" or not (which I think is what "streaming" means in Rails, as opposed to Server Sent Events, Websockets and other ways of streaming data over HTTP). https://github.com/rack/rack/blob/master/lib/rack/response.rb#L27 So maybe the only thing that needs to be added is: def streaming? @chunked end On Tuesday, 15 July 2014 13:38:21 UTC+1, Rodrigo Rosenfeld Rosas wrote: > > This would depend if Content-Length would be set by another middleware, > so depending on the order of the middlewares it might work or not. > > This is just as brittle in my opinion. The proper way of handling this is > through some new API in the Rack library itself to let the middlewares know > whether it's a streamed response or not. > > Such API would also be useful in this issue: > > https://github.com/rails/rails/issues/14358 > > By the way, I can't find it by searching on GitHub. Any ideas why? I can > only access it because I had the link stored in some e-mail of my inbox... > > On 15-07-2014 08:58, ismaSan wrote: > > I haven't tested this but an HTTP streaming response should *not* have a > Content-Length header. Maybe that's enough to detect whether it's streaming > or not? So you look at the properties of the HTTP response itself instead > of the Ruby wrapper, which as you say might change in the future. > > > On Monday, 14 July 2014 22:14:31 UTC+1, Jason Clark wrote: >> >> I'm curious if there's a good way to detect from a Rack middleware >> whether a response is streaming or not. >> >> From what I can see, my options are: >> >> * In the Controller note we've included `ActionController::Live` >> somewhere the middleware can access it >> * Look at the response object coming back to Rack to see if its class is >> `ActionController::Live::Response` >> * Look at the `stream` (if available) on the response object returned to >> Rack to check if it's a `ActionController::Live::Buffer` >> >> All of these ideas seem pretty brittle and liable to break across new >> versions of Rails and/or new streaming mechanisms that might come along. Is >> there something I'm missing? >> >> Thanks! >> >> Jason Clark >> @jasonrclark >> New Relic, Ruby Agent engineer >> > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To post to this group, send email to [email protected] > <javascript:>. > Visit this group at http://groups.google.com/group/rubyonrails-core. > For more options, visit https://groups.google.com/d/optout. > > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.
