Files | Admin

Notes:

Release Name: 0.96.0

Notes:
Unicorn is an HTTP server for Rack applications designed to only serve
fast clients on low-latency, high-bandwidth connections and take
advantage of features in Unix/Unix-like kernels.  Slow clients should
only be served by placing a reverse proxy capable of fully buffering
both the the request and response in between Unicorn and slow clients.

* http://unicorn.bogomips.org/
* mongrel-unicorn@rubyforge.org
* git://git.bogomips.org/unicorn.git

Changes:

This release includes small changes for things allowed by Rack
1.1.  It is also now easier to detect if daemonized process
fails to start.  Manpages received some minor updates as well.

Rack 1.1 allowed us to make the following environment changes:

* "rack.logger" is now set to the "logger" specified in
  the Unicorn config file.  This defaults to a Logger
  instance pointing to $stderr.

* "rack.version" is now at [1,1].  Unicorn remains
  compatible with previous Rack versions if your app
  depends on it.

While only specified since Rack 1.1, Unicorn has always exposed
"rack.input" in binary mode (and has ridiculous integration
tests that go outside of Ruby to prove it!).



Changes: Documentation/unicorn.1.txt | 11 +++--- Documentation/unicorn_rails.1.txt | 10 ++--- GIT-VERSION-GEN | 2 +- GNUmakefile | 4 +- bin/unicorn | 4 +- bin/unicorn_rails | 4 +- lib/unicorn.rb | 21 ++++++++++- lib/unicorn/const.rb | 2 +- lib/unicorn/http_request.rb | 2 +- lib/unicorn/http_response.rb | 3 +- lib/unicorn/launcher.rb | 38 ++++++++++++++++--- local.mk.sample | 2 +- test/exec/test_exec.rb | 2 +- test/rails/{app-2.3.3.1 => app-2.3.5}/.gitignore | 0 test/rails/{app-2.3.3.1 => app-2.3.5}/Rakefile | 0 .../app/controllers/application_controller.rb | 0 .../app/controllers/foo_controller.rb | 0 .../app/helpers/application_helper.rb | 0 .../{app-2.3.3.1 => app-2.3.5}/config/boot.rb | 0 .../{app-2.3.3.1 => app-2.3.5}/config/database.yml | 0 .../config/environment.rb | 0 .../config/environments/development.rb | 0 .../config/environments/production.rb | 0 .../{app-2.3.3.1 => app-2.3.5}/config/routes.rb | 0 .../rails/{app-2.3.3.1 => app-2.3.5}/db/.gitignore | 0 .../{app-2.3.3.1 => app-2.3.5}/log/.gitignore | 0 .../{app-2.3.3.1 => app-2.3.5}/public/404.html | 0 .../{app-2.3.3.1 => app-2.3.5}/public/500.html | 0 test/rails/{app-2.3.3.1 => app-2.3.5}/public/x.txt | 0 test/unit/test_server.rb | 10 +++++ 30 files changed, 83 insertions(+), 32 deletions(-) commit 30e8ae1d0d2eed17eade14978ba52cb2959b9e91 Author: Eric Wong Date: Thu Jan 7 20:53:45 2010 -0800 unicorn 0.96.0 - Rack 1.1 bump This release includes small changes for things allowed by Rack 1.1. It is also now easier to detect if daemonized process fails to start. Manpages received some minor updates as well. Rack 1.1 allowed us to make the following environment changes: * "rack.logger" is now set to the "logger" specified in the Unicorn config file. This defaults to a Logger instance pointing to $stderr. * "rack.version" is now at [1,1]. Unicorn remains compatible with previous Rack versions if your app depends on it. While only specified since Rack 1.1, Unicorn has always exposed "rack.input" in binary mode (and has ridiculous integration tests that go outside of Ruby to prove it!). commit 3eb8dd9bd48ae031a90747210c28ece491d1017e Merge: 19dac8e 52400de Author: Eric Wong Date: Thu Jan 7 20:49:59 2010 -0800 Merge branch 'rack-1.1' * rack-1.1: http_response: disallow blank, multi-value headers local.mk.sample: use rack-1.1.0 bump "rack.version" env to [1,1] set env["rack.logger"] for applications commit 52400de1c9e9437b5c9df899f273485f663bb5b5 Author: Eric Wong Date: Tue Jan 5 17:36:17 2010 -0800 http_response: disallow blank, multi-value headers The HeaderHash optimizations in Rack 1.1 interact badly with Rails 2.3.5 (and possibly other frameworks/apps) which set multi-value "Set-Cookie" headers without relying on the proper methods provided by Rack::Utils. While this is an issue with Rails not using properly, there may be similar apps that make this mistake and Rack::Lint does not guard against it. Rack-ML-Ref: <20100105235845.GB3377@dcvr.yhbt.net> commit 8da4448c7117759b0fb8ea8e4243e81ea8b26e7c Author: Eric Wong Date: Tue Jan 5 17:17:00 2010 -0800 local.mk.sample: use rack-1.1.0 commit 19dac8e60e12036b2717cb4933e79ac9efb04d40 Author: Eric Wong Date: Tue Jan 5 16:13:53 2010 -0800 bump Rails test to 2.3.5 Rails 2.3.3.1 is ancient commit 841f967666292f634c6af485f7ac452f36cc2028 Merge: 40924ca fe005f5 Author: Eric Wong Date: Tue Jan 5 16:10:17 2010 -0800 Merge branch 'ready_pipe' * ready_pipe: launcher: no point in sync-ing $stdin launcher: fix compatibility with other servers clarify errors when listeners fail to bind launcher: descriptive error message on startup failure Avoid leaking ready pipe file descriptor to workers exit with failure if master dies when daemonized commit 40924ca5f42a5708159ac27b992805f24ecbae9b Author: Eric Wong Date: Tue Jan 5 12:10:25 2010 -0800 NEWS: generation depends on .manifest commit fe005f50efc8db5b9f4b2387b3b2c42f12d7c2c0 Author: Eric Wong Date: Tue Dec 29 21:21:47 2009 -0800 launcher: no point in sync-ing $stdin Inspection of the MRI source reveals that IO#sync=true only appears to only apply for writes. Though it could eventually make sense to disable read buffering by setting IO#sync=true, it does not appear to happen. Of course we never read from $stdin anyways.... commit 8268fea415a8c76da810f0a43e0bf63ac6c77238 Author: Eric Wong Date: Tue Dec 29 12:44:20 2009 -0800 launcher: fix compatibility with other servers Rainbows! does not yet know about ready_pipe, and will probably not know about it until Unicorn 0.97.0 commit 1a0f0688bb2257c6db8e8a3f41b9a41641c2db3f Author: Iñaki Baz Castillo Date: Mon Dec 28 15:46:26 2009 -0800 clarify errors when listeners fail to bind When using multiple listeners, the log messages can be potentially misleading as to which listener fails to bind: Before: INFO -- : unlinking existing socket=/tmp/unicorn.sock INFO -- : listening on addr=/tmp/unicorn.sock fd=3 unicorn/socket_helper.rb:110:in `initialize': Permission denied - bind(2) (Errno::EACCES) After: INFO -- : unlinking existing socket=/tmp/openxdms.sock INFO -- : listening on addr=/tmp/openxdms.sock fd=3 FATAL -- : error adding listener addr=0.0.0.0:84 unicorn/socket_helper.rb:110:in `initialize': Permission denied - bind(2) (Errno::EACCES) commit 4239f0618c8107545fd5babd256c89ffd82553bd Author: Iñaki Baz Castillo Date: Mon Dec 28 15:46:26 2009 -0800 clarify errors when listeners fail to bind When using multiple listeners, the log messages can be potentially misleading as to which listener fails to bind: Before: INFO -- : unlinking existing socket=/tmp/unicorn.sock INFO -- : listening on addr=/tmp/unicorn.sock fd=3 unicorn/socket_helper.rb:110:in `initialize': Permission denied - bind(2) (Errno::EACCES) After: INFO -- : unlinking existing socket=/tmp/openxdms.sock INFO -- : listening on addr=/tmp/openxdms.sock fd=3 FATAL -- : error adding listener addr=0.0.0.0:84 unicorn/socket_helper.rb:110:in `initialize': Permission denied - bind(2) (Errno::EACCES) commit 52eee4e424198a3c80793ee9c930fd3bb0285168 Author: Eric Wong Date: Mon Dec 28 11:16:00 2009 -0800 launcher: descriptive error message on startup failure Rather than erroring out with a non-descript EOFError, show a warning message telling users to check the logs instead. Reported-by: Iñaki Baz Castillo mid=200912281350.44760.ibc@aliax.net commit 36888441021fbb0ae0cf724dc4e700d316b4d1bd Author: Eric Wong Date: Sun Dec 27 19:38:39 2009 -0800 Avoid leaking ready pipe file descriptor to workers Otherwise the original spawner process may not notice the close as it's still being shared by workers. While we're at it, avoid confusing the original spawner by using readpartial instead of sysread. commit 5eea32764571b721cd1a89cf9ebfa853c621ac9e Author: Eric Wong Date: Sat Dec 26 17:04:57 2009 -0800 exit with failure if master dies when daemonized This behavior change also means our grandparent (launched from a controlling terminal or script) will wait until the master process is ready before returning. Thanks to Iñaki Baz Castillo for the initial implementations and inspiration. commit 53b53c7d2e8c4fe6ef30184782bd7ab466becf19 Author: Eric Wong Date: Sat Dec 26 15:39:29 2009 -0800 bump "rack.version" env to [1,1] This will match what's in Rack the 1.1.0 release. commit 643994afcdbd4121c0d131a87052cdd17d40e54f Author: Eric Wong Date: Fri Dec 25 01:49:13 2009 +0000 doc: update manpages since we got new features working_directory and Worker#user got added over time, so recommending Dir.chdir and Process::UID.change_privilege is bad. commit db9c8a22d824a3a95ddfcafb0338fcc6e5157608 Author: Eric Wong Date: Fri Dec 25 01:39:52 2009 +0000 bin/*: shebangs should be educational commit ef02631a26bd29f8930585f207839bf35f2bf1e8 Author: Eric Wong Date: Mon Dec 14 00:09:40 2009 -0800 set env["rack.logger"] for applications rack.git upstream has it, so it will likely be in Rack 1.1