February 26th, 2013
· This release fixes a bug in Unicorn::HttpParser#filter_body which affected some configurations of Rainbows! There is also a minor size reduction in the DSO.
February 21st, 2013
· Unicorn::Const::UNICORN_VERSION is now auto-generated from GIT-VERSION-GEN and always correct. Minor cleanups for hijacking.
February 7th, 2013
· This pre-release adds hijacking support for Rack 1.5 users. See Rack documentation for more information about hijacking. There is also a new --no-default-middleware/-N option for the `unicorn' command to ignore RACK_ENV within unicorn thanks to Lin Jen-Shin.
· There are only documentation and test-portability updates since 4.6.0pre1, no code changes.
December 8th, 2012
· The new check_client_connection option allows unicorn to detect most disconnected local clients before potentially expensive application processing begins. This feature is useful for applications experiencing spikes of traffic leading to undesirable queue times, as clients will disconnect (and perhaps even retry, compounding the problem) before unicorn can even start processing the request. To enable this feature, add the following line to a unicorn config file: check_client_connection true This feature only works when nginx (or any other HTTP/1.0+ client) is on the same machine as unicorn. A huge thanks to Tom Burns for implementing and testing this change in production with real traffic (including mitigating an unexpected DoS attack). ref: http://mid.gmane.org/CAK4qKG3rkfVYLyeqEqQyuNEh_nZ8yw0X_cwTxJfJ+TOU+y8Femail@example.com
· This release fixes broken Rainbows! compatibility in 4.5.0pre1.
October 11th, 2012
· Non-regular files are no longer reopened on SIGUSR1. This allows users to specify FIFOs as log destinations.
· TCP_NOPUSH/TCP_CORK is no longer set/unset by default. Use :tcp_nopush explicitly with the "listen" directive if you wish to enable TCP_NOPUSH/TCP_CORK.
· Listen sockets are now bound _after_ loading the application for preload_app(true) users. This prevents load balancers from sending traffic to an application server while the application is still loading.
· There are also minor test suite cleanups.
April 30th, 2012
· Call shutdown(2) if a client EOFs on us during upload. We can avoid holding a socket open if the Rack app forked a process during uploads.
· ignore potential Errno::ENOTCONN errors (from shutdown(2)). Even on LANs, connections can occasionally be accept()-ed but be unusable afterwards.
March 27th, 2012
· Stale pid files are detected if a pid is recycled by processes belonging to another user, thanks to Graham Bleach.
· nginx example config updates thanks to to Eike Herzbach.
· KNOWN_ISSUES now documents issues with apps/libs that install conflicting signal handlers.
January 30th, 2012
· The GPLv3 is now an option to the Unicorn license. The existing GPLv2 and Ruby-only terms will always remain options, but the GPLv3 is preferred.
· Daemonization is correctly detected on all terminals for development use (Brian P O'Rourke).
· Unicorn::OobGC respects applications that disable GC entirely during application dispatch (Yuichi Tateno).
· Many test fixes for OpenBSD, which may help other *BSDs, too. (Jeremy Evans).
· There is now _optional_ SSL support (via the "kgio-monkey" RubyGem). On fast, secure LANs, SSL is only intended for detecting data corruption that weak TCP checksums cannot detect. Our SSL support is remains unaudited by security experts.
· There are also some minor bugfixes and documentation improvements.
· Ruby 2.0.0dev also has a copy-on-write friendly GC which can save memory when combined with "preload_app true", so if you're in the mood, start testing Unicorn with the latest Ruby!
August 26th, 2011
· The last-resort timeout mechanism was inaccurate and often delayed in activation since the 2.0.0 release. It is now fixed and remains power-efficient in idle situations, especially with the wakeup reduction in MRI 1.9.3+.
· There is also a new document on application timeouts intended to discourage the reliance on this last-resort mechanism. It is visible on the web at: http://unicorn.bogomips.org/Application_Timeouts.html
August 22nd, 2011
· Rack::Chunked and Rack::ContentLength middlewares are loaded by default for RACK_ENV=(development|deployment) users to match Rack::Server behavior. As before, use RACK_ENV=none if you want fine-grained control of your middleware. This should also help users of Rainbows! and Zbatery.
· CTL characters are now rejected from HTTP header values.
· Exception messages are now filtered for [:cntrl:] characters since application/middleware authors may forget to do so * Workers will now terminate properly if a SIGQUIT/SIGTERM/SIGINT is received while during worker process initialization.
· close-on-exec is explicitly disabled to future-proof against Ruby 2.0 changes [ruby-core:38140]
June 30th, 2011
· This release fixes things for users of per-worker "listen" directives in the after_fork hook.
· The "timeout" configurator directive is now truncated to 0x7ffffffe seconds to prevent overflow when calling IO.select.
June 27th, 2011
· A single Unicorn instance may manage more than 1024 workers without needing privileges to modify resource limits. As a result of this, the "raindrops" gem/library is now a required dependency.
· TCP socket defaults now favor low latency to mimic UNIX domain socket behavior (tcp_nodelay: true, tcp_nopush: false). This hurts throughput, users who want to favor throughput should specify "tcp_nodelay: false, tcp_nopush: true" in the listen directive.
· Error logging is more consistent and all lines should be formatted correctly in backtraces. This may break the behavior of some log parsers.
· The call stack is smaller and thus easier to examine backtraces when debugging Rack applications.
· There are some internal API changes and cleanups, but none that affect applications designed for Rack. See "git log v3.7.0.." for details.
· For users who cannot install kgio or raindrops, Unicorn 1.1.x remains supported indefinitely. Unicorn 3.x will remain supported if there is demand. We expect raindrops to introduce fewer portability problems than kgio did, however.
June 10th, 2011minor feature update:
· miscellaneous documentation improvements
· return 414 (instead of 400) for Request-URI Too Long
· strip leading and trailing linear whitespace in header values
meant for Rainbows! users:
April 27th, 2011
· Our attempt in 3.6.0 to workaround a problem with the OpenSSL PRNG actually made the problem worse. This release corrects the workaround to properly reseed the OpenSSL PRNG after forking.
April 21st, 2011
· This version includes workarounds for fork() issues with the pseudo-random number generators shipped with Ruby and robustness improvements for log reopening.
February 8th, 2011
· IPv6 support in the HTTP hostname parser and configuration language. Configurator syntax for "listen" addresses should be the same as nginx. Even though we support IPv6, we will never support non-LAN/localhost clients connecting to Unicorn.
· TCP_NOPUSH/TCP_CORK is enabled by default to optimize for bandwidth usage and avoid unnecessary wakeups in nginx.
· Updated KNOWN_ISSUES document for bugs in recent Ruby 1.8.7 (RNG needs reset after fork) and nginx+sendfile()+FreeBSD 8.
· examples/nginx.conf updated for modern stable versions of nginx.
· "Status" in headers no longer ignored in the response, Rack::Lint already enforces this so we don't duplicate the work.
· All tests pass under Ruby 1.9.3dev
· various bugfixes in the (mostly unused) ExecCGI class that powers http://bogomips.org/unicorn.git
January 6th, 2011
· Certain applications that already serve hundreds/thousands of requests a second should experience performance improvements due to Time.now.httpdate usage being removed and reimplemented in C.
· There are also minor internal changes and cleanups for Rainbows!
December 27th, 2010
· There are numerous improvements in the HTTP parser for Rainbows!, none of which affect Unicorn-only users.
· The kgio dependency is incremented to 2.1: this should avoid ENOSYS errors for folks building binaries on newer Linux kernels and then deploying to older ones.
December 10th, 2010
· This release enables tuning the client_buffer_body_size to raise or lower the threshold for buffering request bodies to disk. This only applies to users who have not disabled rewindable input. There is also a TeeInput bugfix for uncommon usage patterns and Configurator examples in the FAQ should be fixed.
December 3rd, 2010
· One bugfix for Rainbows! ...and only Rainbows! This release fixes HTTP pipelining for requests with bodies for users of synchronous Rainbows! concurrency models.
· Since Unicorn itself does not support keepalive nor pipelining, Unicorn-only users need not upgrade.
November 22nd, 2010
· This release updates us to the Kgio 2.x series which should play more nicely with other applications. There are also bugfixes from the 2.0.1 release and a small bugfix to the new StreamInput class.
· The Unicorn 3.x series will supercede the 2.x series while the 1.x series will remain supported indefinitely.
November 18th, 2010
· An error handling problems than caused certain errors to not be logged nor responded to correctly has been fixed.
· A race condition in reload and HttpParserError constant resolution were fixed.
· A parser error test from Rainbows was added.
October 28th, 2010
· This version mostly features internal cleanups in preparation for future versions.
· User visible changes include reductions in CPU wakeups on idle sites using high timeouts.
· Barring possible portability issues due to the introduction of the kgio library, this release should be ready for all to use, though 1.1.x (and possibly 1.0.x) versions will continue to be maintained.
October 5th, 2010
· We no longer unlinking actively listening sockets upon startup (but continue to unlink dead ones). This bug could trigger downtime and nginx failures if a user makes an error and attempts to start Unicorn while it is already running. Thanks to Jordan Ritter for the detailed bug report leading to this fix.
· There are also minor documentation and test updates pulled in from master. This is hopefully the last bugfix release of the 1.1.x series.
August 30th, 2010
· This release fixes race conditions during SIGUSR1 log cycling. This bug mainly affects Rainbows! users serving static files, but some Rack apps use threads internally even under Unicorn.
July 11th, 2010
· Unicorn::TeeInput constant resolution for Unicorn::ClientError was broken while simplifying the code for RDoc. This affects users of Rainbows! and Zbatery.
July 8th, 2010
· This is a small, incremental feature release with some internal changes to better support upcoming versions of the Rainbows! and Zbatery Web servers.
· There is no need to upgrade, but also little danger in doing so.
· There was one pedantic bugfix which shouldn't affect anyone and some small documentation updates.
June 11th, 2010
· The "working_directory" configuration parameter is now handled before config.ru. That means "unicorn" and "unicorn_rails" no longer fail when initially started outside of the configured "working_directory" where a config.ru is required. Rails 3 (beta) support should be improved, too.
June 8th, 2010
· This release fixes a bug in the HTTP parser triggered by rare bots sending the "Version" header.
· Horizontal tabs are also allowed as leading whitespace.
· The "logger" configuration no longer requires a "close" method.
· There's a new OobGC middleware which forces the GC to run when not servicing clients.
· The out-of-the-box Rails3 experience was improved with "unicorn_rails" (though the "unicorn" command is still recommended).
October 27th, 2009
· This release works around BSD stdio compatibility issues that affect FreeBSD and Mac OS X systems using Ruby 1.8. This issue does not affect Ruby 1.9 users.
· Additionally there are small documentation updates, one error handling improvement, and one minor change that should improve the reliability of signal delivery.
October 10th, 2009
· This release fixes compatibility with OpenBSD (and possibly other Unices with stricter fchmod(2) implementations) thanks to Jeremy Evans. Additionally there are small documentation changes all around.
October 8th, 2009
· Truncated POST bodies from URL-encoded forms in Rails are avoided by switching TeeInput to use read-in-full semantics (only) when a Content-Length: header exists.
· Chunked request bodies continue to exhibit readpartial semantics to support simultaneous bidirectional chunking.
October 5th, 2009
· Permissions for release tarballs/gems were fixed.
September 5th, 2009
· 18 years too late, Unicorn finally gets HTTP/0.9 support as HTTP was implemented in 1991.
August 17th, 2009
· README: update version numbers for website Update Rails tests to run on Rails 126.96.36.199 README: latest stable version is 0.8.4 unicorn_http: small cleanups and size reduction Remove Ragel-generated file from version control unicorn_http: remove typedef from http_parser unicorn_http: update copyright unicorn_http: change "global_" prefix to "g_" unicorn_http: add helpful macros extconf: SIZEOF_OFF_T should be a ruby.h macro Refactoring unicorn_http C/Ragel code http: find_common_field_value => find_common_field http: split uncommon_field into a separate function http: remove some redundant functions http: "hp" denotes http_parser structs for consistency http: small cleanup in "https" detection http: minor cleanup of http_field handling http: split out server params handling http: move global initialization code http: cleanup setting for common values => globals http: remove noise functions http: move non-Ruby-specific macros c_util.h http: prepare http_parser struct for body processing http: generic C string vs VALUEs comparison function http: process Content-Length and Transfer-Encoding http: preliminary chunk decoding test_upload: extra CRLF is needed Switch to Ragel/C-based chunk/trailer parser http: unit tests for overflow and bad lengths http: add test for invalid trailer http: join repeated headers with a comma test_util: explicitly close tempfiles for GC-safety test_exec: wait for worker readiness Documentation updates test_signals: unlink log files of KILL-ed process http: rename read_body to filter_body http: add CONST_MEM_EQ macro http: add "HttpParser#keepalive?" method http: freeze fields when creating them, always README: everybody loves Ruby DSLs http_request: reinstate empty StringIO optimization tee_input: make interface more usable outside of Unicorn Drop the micro benchmarks http: fix warning when sizeof(off_t) == sizeof(long long) GNUmakefile: Fix "install" target Fix documentation for Util.reopen_logs http_response: pass through unknown status codes const: remove unused constants update TODO http: support for "Connection: keep-alive" TODO: remove keep-alive/pipelining Make launchers __END__-aware Remove explicit requires for Rack things app/inetd: explicitly close pipe descriptors on CatBody#close
August 7th, 2009
· This release allows graceful degradation in case a user is using a status code not defined by Rack::Utils::HTTP_STATUS_CODES. A patch has been submitted upstream to Rack but this issue may still affect users of yet-to-be-standardized status codes.
May 27th, 2009
· enforce Rack dependency, minor performance improvements and fixes
April 17th, 2009
· fix 100% CPU usage when idle, small cleanups