Eric Wong
2011-Aug-19 21:07 UTC
[PATCH] Rack::Chunked and ContentLength middlewares by default
This was prompted by the recent thread in http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/1106 starting with Message-ID: CAL3dLFrkDix=L-STUnrxy7Wuc4wDZOb05NLbG6HABvFJNGmnmQ at mail.gmail.com Rainbows! users have also run into this problem a few times, too: AANLkTimSuK7-ihgCa00D-fot4U-FbZt2diQFndyN4uit at mail.gmail.com 2B157204-E5C6-4F5D-98A9-E2A79F9F9765 at christophsturm.com>From 1077961a3f8933c65d39c7e6c9ed6ff3b6b53647 Mon Sep 17 00:00:00 2001From: Eric Wong <normalperson at yhbt.net> Date: Fri, 19 Aug 2011 20:47:29 +0000 Subject: [PATCH] Rack::Chunked and ContentLength middlewares by default This is needed to match the behavior of Rack::Server for RACK_ENV=(deployment|development), actually. This won''t affect users of other RACK_ENV values. This change has minor performance consequences, so users negatively affected should set RACK_ENV to "none" instead for full control of their middleware stack. This mainly affects Rainbows!/Zbatery users since they have persistent connections and /need/ Content-Length or Transfer-Encoding:chunked headers. --- lib/unicorn.rb | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) diff --git a/lib/unicorn.rb b/lib/unicorn.rb index bb5409b..b882ce3 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -50,9 +50,14 @@ module Unicorn pp({ :inner_app => inner_app }) if $DEBUG # return value, matches rackup defaults based on env + # Unicorn does not support persistent connections, but Rainbows! + # and Zbatery both do. Users accustomed to the Rack::Server default + # middlewares will need ContentLength/Chunked middlewares. case ENV["RACK_ENV"] when "development" Rack::Builder.new do + use Rack::ContentLength + use Rack::Chunked use Rack::CommonLogger, $stderr use Rack::ShowExceptions use Rack::Lint @@ -60,6 +65,8 @@ module Unicorn end.to_app when "deployment" Rack::Builder.new do + use Rack::ContentLength + use Rack::Chunked use Rack::CommonLogger, $stderr run inner_app end.to_app -- Eric Wong