I love testing different combinations of software and so its should come as no surprise that Ruby, Rack, and the plentiful middleware for it makes for plenty of testing.

Today I was testing Regdel with Unicorn, and I ran into a problem with Rack::Lint. For some reason, something was causing a Content-Length header of zero to be sent.

I thought it might have been rack-docunext-content-length, but thankfully, no, that was not the cause.

I realized that Unicorn was defaulting to a development environment and was loading the following Rack::Middleware:

  case ENV["RACK_ENV"]
  when "development"
    Rack::Builder.new do
      use Rack::CommonLogger, $stderr
      use Rack::ShowExceptions
      use Rack::Lint
      run inner_app
    end.to_app
  when "deployment"
    Rack::Builder.new do
      use Rack::CommonLogger, $stderr
      run inner_app
    end.to_app
  else
    inner_app
  end

I believe Rack::Lint was getting called before anything else. Maybe that was the cause? I’m not sure, but if I use Rack::Lint in Regdel, there are no problems, and there is not Content-Length header of zero getting sent to my client.

I’m now launching Unicorn like this:

/var/lib/gems/1.8/gems/unicorn-0.95.3/bin/unicorn --env none -l 3000