Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

v4.3.1

unicorn 4.3.1 - shutdown() fixes
* 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.

Thanks to Joel Nimety <jnimety@continuity.net>,
Matt Smith <matt@nearapogee.com> and George <lists@southernohio.net>
on the mongrel-unicorn@rubyforge.org mailing list for their
feedback and testing for this release.

v4.3.0

unicorn 4.3.0 - minor fixes and updates
* PATH_INFO (aka REQUEST_PATH) increased to 4096 (from 1024).
  This allows requests with longer path components and matches
  the system PATH_MAX value common to GNU/Linux systems for
  serving filesystem components with long names.

* Apps that fork() (but do not exec()) internally for background
  tasks now indicate the end-of-request immediately after
  writing the Rack response.

Thanks to Hongli Lai, Lawrence Pit, Patrick Wenger and Nuo Yan
for their valuable feedback for this release.

v4.2.1

unicorn 4.2.1 - minor fix and doc updates
* 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.

v4.2.0

unicorn 4.2.0
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!

v4.1.1

unicorn 4.1.1 - fix last-resort timeout accuracy
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

v4.1.0

unicorn 4.1.0 - small updates and fixes
* 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]

v4.0.1

unicorn 4.0.1 - regression bugfixes
This release fixes things for users of per-worker "listen"
directives in the after_fork hook.  Thanks to ghazel@gmail.com
for reporting the bug.

The "timeout" configurator directive is now truncated to
0x7ffffffe seconds to prevent overflow when calling
IO.select.

v4.0.0

unicorn 4.0.0 - for mythical hardware!
A single Unicorn instance may manage more than 1024 workers
without needing privileges to modify resource limits.  As a
result of this, the "raindrops"[1] 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[2] 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.

[1] http://raindrops.bogomips.org/
[2] http://bogomips.org/kgio/

v3.7.0

unicorn 3.7.0 - minor feature update
* miscellaneous documentation improvements
* return 414 (instead of 400) for Request-URI Too Long
* strip leading and trailing linear whitespace in header values

User-visible improvements meant for Rainbows! users:

* add :ipv6only "listen" option (same as nginx)

v3.6.2

unicorn 3.6.2 - fix Unicorn::OobGC module
The optional Unicorn::OobGC module is reimplemented to fix
breakage that appeared in v3.3.1.  There are also minor
documentation updates, but no code changes as of 3.6.1 for
non-OobGC users.

There is also a v1.1.7 release to fix the same OobGC breakage
that appeared for 1.1.x users in the v1.1.6 release.

v1.1.7

unicorn 1.1.7 - major fixes to minor components
No changes to the core code, so this release only affects users
of the Unicorn::OobGC and Unicorn::ExecCGI modules.
Unicorn::OobGC was totally broken by the fix in the v1.1.6
release and is now reimplemented.  Unicorn::ExecCGI (which
hardly anybody uses) now returns proper HTTP status codes.

v3.6.1

unicorn 3.6.1 - fix OpenSSL PRNG workaround
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.

v3.6.0

unicorn 3.6.0 - small fixes, PRNG workarounds
Mainly small fixes, improvements, and workarounds for fork() issues
with pseudo-random number generators shipped with Ruby (Kernel#rand,
OpenSSL::Random (used by SecureRandom and also by Rails).

The PRNG issues are documented in depth here (and links to Ruby Redmine):

  http://bogomips.org/unicorn.git/commit?id=1107ede7
  http://bogomips.org/unicorn.git/commit?id=b3241621

If you're too lazy to upgrade, you can just do this in your after_fork
hooks:

  after_fork do |server,worker|
    tmp = srand
    OpenSSL::Random.seed(tmp.to_s) if defined?(OpenSSL::Random)
  end

There are also small log reopening (SIGUSR1) improvements:

* relative paths may also be reopened, there's a small chance this
  will break with a handful of setups, but unlikely.  This should
  make configuration easier especially since the "working_directory"
  configurator directive exists.  Brought up by Matthew Kocher:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/900

* workers will just die (and restart) if log reopening fails for
  any reason (including user error).  This is to workaround the issue
  reported by Emmanuel Gomez:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/906

v3.5.0

unicorn 3.5.0 - very minor improvements
A small set of small changes but it's been more than a month
since our last release.  There are minor memory usage and
efficiently improvements (for graceful shutdowns).  MRI 1.8.7
users on *BSD should be sure they're using the latest patchlevel
(or upgrade to 1.9.x) because we no longer workaround their
broken stdio (that's MRI's job :)

v3.4.0

unicorn 3.4.0 - for people with very big LANs
* 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

v3.3.1

unicorn 3.3.1 - one minor, esoteric bugfix
We now close the client socket after closing the response body.
This does not affect most applications that run under Unicorn,
in fact, it may not affect any.

There is also a new v1.1.6 release for users who do not use
kgio.

v1.1.6

unicorn 1.1.6 - one minor, esoteric bugfix
We now close the client socket after closing the response body.
This does not affect most applications that run under Unicorn,
in fact, it may not affect any.

v3.3.0

unicorn 3.3.0 - minor optimizations
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!

v3.2.1

unicorn 3.2.1 - parser improvements for Rainbows!
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.

There are also minor documentation improvements, the website
is now JavaScript-free!

(Ignore the 3.2.0 release, I fat-fingered some packaging things)

v3.2.0

unicorn 3.2.0 - parser improvements for Rainbows!
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.

There are also minor documentation improvements, the website
is now JavaScript-free!

v3.1.0

unicorn 3.1.0 - client_buffer_body_size tuning
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

v3.0.1

unicorn 3.0.1 - 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.

v3.0.0

unicorn 3.0.0 - disable rewindable input!
Rewindable "rack.input" may be disabled via the
"rewindable_input false" directive in the configuration file.
This will violate Rack::Lint for Rack 1.x applications, but can
reduce I/O for applications that do not need a rewindable
input.

This release updates us to the Kgio 2.x series which should play
more nicely with other libraries and applications.  There are
also internal cleanups and improvements for future versions of
Rainbows!

The Unicorn 3.x series supercedes the 2.x series
while the 1.x series will remain supported indefinitely.

v3.0.0pre2

unicorn 3.0.0pre2 - less bad than 2.x or 3.0.0pre1!
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.

v2.0.1

unicorn 2.0.1 - fix errors in error handling
This release fixes errors in our own error handling,
causing certain errors to not be logged nor responded
to correctly.

Eric Wong (3):
      t0012: fix race condition in reload
      http_server: fix HttpParserError constant resolution
      tests: add parser error test from Rainbows!

v3.0.0pre1

unicorn 3.0.0pre1
Rewindable "rack.input" may be disabled via the
"rewindable_input false" directive in the configuration file.
This will violate Rack::Lint for Rack 1.x applications, but
can reduce I/O for applications that do not need it.

There are also internal cleanups and enhancements for future
versions of Rainbows!

Eric Wong (11):
      t0012: fix race condition in reload
      enable HTTP keepalive support for all methods
      http_parser: add HttpParser#next? method
      tee_input: switch to simpler API for parsing trailers
      switch versions to 3.0.0pre
      add stream_input class and build tee_input on it
      configurator: enable "rewindable_input" directive
      http_parser: ensure keepalive is disabled when reset
      *_input: make life easier for subclasses/modules
      tee_input: restore read position after #size
      preread_input: no-op for non-rewindable "rack.input"

v2.0.0

unicorn 2.0.0 - mostly internal cleanups
Despite the version number, this release mostly features
internal cleanups for future versions of Rainbows!.  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.
However, 1.1.x (and possibly 1.0.x) will continue to be
maintained.  Unicorn 1.1.5 and 1.0.2 have also been released
with bugfixes found during development of 2.0.0.

v1.1.5

unicorn 1.1.5
This maintenance release fixes several long-standing but
recently-noticed bugs.  SIGHUP reloading now correctly restores
default values if they're erased or commented-out in the Unicorn
configuration file.  Delays/slowdowns in signal handling since
0.990 are fixed, too.

v1.0.2

unicorn 1.0.2
This is the latest maintenance release of the 1.0.x series.
All users are encouraged to upgrade to 1.1.x stable series
and report bugs there.

Shortlog of changes since 1.0.1:

Eric Wong (8):
      SIGTTIN works after SIGWINCH
      fix delays in signal handling
      Rakefile: don't post freshmeat on empty changelogs
      Rakefile: capture prerelease tags
      configurator: use "__send__" instead of "send"
      configurator: reloading with unset values restores default
      gemspec: depend on Isolate 3.0.0 for dev
      doc: stop using deprecated rdoc CLI options

v2.0.0pre3

unicorn 2.0.0pre3 - more small fixes
There is a new Unicorn::PrereadInput middleware to which allows
input bodies to be drained off the socket and buffered to disk
(or memory) before dispatching the application.

HTTP Pipelining behavior is fixed for Rainbows!  There
are some small Kgio fixes and updates for Rainbows!
users as well.

v2.0.0pre2

unicorn 2.0.0pre2 - releases are cheap
Internal changes/cleanups for Rainbows!

v2.0.0pre1

unicorn 2.0.0pre1 - a boring "major" release
Mostly internal cleanups for future versions of Rainbows! and
people trying out Rubinius.  There are tiny performance
improvements for Ruby 1.9.2 users which may only be noticeable
with Rainbows!.

There is a new dependency on the "kgio" library for kinder,
gentler I/O :)  Please report any bugs and portability issues
with kgio to the Unicorn mailing list[1].

Unicorn 1.1.x users are NOT required nor even encouraged to
upgrade yet.  Unicorn 1.1.x will be maintained for the
forseeable future.

[1] - mongrel-unicorn@rubyforge.org

v1.1.4

unicorn 1.1.4 - small bug fix and doc updates
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.

ref: http://mid.gmane.org/8D95A44B-A098-43BE-B532-7D74BD957F31@darkridge.com

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.

v1.1.3

unicorn 1.1.3 - small bug fixes
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.

Other small fixes:
* SIGTTIN works as documented after SIGWINCH
* --help output from `unicorn` and `unicorn_rails` is more consistent

v1.1.2

unicorn 1.1.2 - fixing upgrade rollbacks
This release is fixes a long-standing bug where the original PID
file is not restored when rolling back from a USR2 upgrade.
Presumably most upgrades aren't rolled back, so it took over a
year to notice this issue.  Thanks to Lawrence Pit for
discovering and reporting this issue.

v1.0.1

unicorn 1.0.1 - bugfixes only
The first maintenance release of 1.0.x, this release is
primarily to fix a long-standing bug where the original PID file
is not restored when rolling back from a USR2 upgrade.
Presumably most upgrades aren't rolled back, so it took over a
year to notice this issue.  Thanks to Lawrence Pit for
discovering and reporting this issue.

There is also a pedantic TeeInput bugfix which shouldn't affect
real apps from the 1.1.x series and a test case fix for OSX,
too.

v1.1.1

unicorn 1.1.1 - fixing cleanups gone bad :x
Unicorn::TeeInput constant resolution for Unicorn::ClientError
got broken simplifying code for RDoc.  This affects users
of Rainbows! and Zbatery.

v1.1.0

unicorn 1.1.0 - small changes and cleanups
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 if you're
happy with 1.0.0, but also little danger in upgrading.

There is one pedantic bugfix which shouldn't affect anyone
and small documentation updates as well.

v1.0.0

unicorn 1.0.0 - yes, this is a real project
There are only minor changes since 0.991.0.

For users clinging onto the past, MRI 1.8.6 support has been
restored.  Users are strongly encouraged to upgrade to the
latest 1.8.7, REE or 1.9.1.

For users looking towards the future, the core test suite and
the Rails 3 (beta) integration tests pass entirely under 1.9.2
preview3.  As of the latest rubinius.git[1], Rubinius support is
nearly complete as well.

Under Rubinius, signals may corrupt responses as they're being
written to the socket, but that should be fixable transparently
to us[4].  Support for the hardly used, hardly documented[2]
embedded command-line switches in rackup config (.ru) files is
is also broken under Rubinius.

The recently-released Rack 1.2.1 introduced no compatiblity
issues[3] in core Unicorn.  We remain compatible with all Rack
releases starting with 0.9.1 (and possibly before).

[1] tested with Rubinius upstream commit
cf4a5a7
[2] lets avoid the Dueling Banjos effect here :x
[3] actually, Rack 1.2.1 is broken under 1.8.6.
[4] http://github.com/evanphx/rubinius/issues/373

v0.991.0

unicorn 0.991.0 - startup improvements
The "working_directory" configuration parameter is now handled
before config.ru.  That means "unicorn" and "unicorn_rails" no
longer barfs when initially started outside of the configured
"working_directory" where a config.ru is required.  A huge
thanks to Pierre Baillet for catching this ugly UI inconsistency
before the big 1.0 release

Thanks to Hongli Lai, out-of-the-box Rails 3 (beta) support
should be improved for deployments lacking a config.ru

There are more new integration tests, cleanups and some
documentation improvements.

v0.990.0

unicorn 0.990.0 - inching towards 1.0
Thanks to Augusto Becciu for finding a bug in the HTTP parser
that caused a TypeError (and 500) when a rare client set the
"Version:" header which conflicts with the HTTP_VERSION header
we parse in the first line of the request[1].

Horizontal tabs are now allowed as leading whitespace in header
values as according to RFC 2616 as pointed out by
Iñaki Baz Castillo[2].

Taking a hint from Rack 1.1, the "logger" configuration
parameter no longer requires a "close" method.  This means some
more Logger replacements may be used.

There's a new, optional, Unicorn (and maybe Passenger)-only
middleware, Unicorn::OobGC[2] that runs GC outside of the normal
request/response cycle to help out memory-hungry applications.
Thanks to Luke Melia for being brave enough to test and report
back on my big_app_gc.rb monkey patch[3] which lead up to this.

Rails 3 (beta) support:

  Using "unicorn" is still recommended as Rails 3 comes with
  a config.ru, but "unicorn_rails" is cleaned up a bit and
  *should* work as well as "unicorn" out-of-the-box.  Feedback
  is much appreciated.

Rubinius updates:

  USR2 binary upgrades are broken due to
  {TCPServer,UNIXServer}.for_fd[5][6] being broken
  (differently).

  Repeatedly hitting the server with signals in a tight
  loop is unusual and not recommended[7].

  There are some workarounds and general code cleanups for other
  issues[8], as well but things should generally work unless you
  need USR2 upgrades.  Feedback and reports would be greatly
  appreciated as usual.

MRI support:

  All tests (except old Rails) run and pass under 1.9.2-preview3.
  1.8.7 and 1.9.1 work well as usual and will continue to be
  supported indefinitely.

Lets hope this is the last release before 1.0.  Please report
any issues on the mailing list[9] or email us privately[a].
Don't send HTML mail.

[1] - http://mid.gmane.org/AANLkTimuGgcwNAMcVZdViFWdF-UcW_RGyZAue7phUXps@mail.gmail.com
[2] - http://mid.gmane.org/i2xcc1f582e1005070651u294bd83oc73d1e0adf72373a@mail.gmail.com
[3] - http://unicorn.bogomips.org/Unicorn/OobGC.html
[4] - http://unicorn.bogomips.org/examples/big_app_gc.rb
[5] - http://github.com/evanphx/rubinius/issues/354
[6] - http://github.com/evanphx/rubinius/issues/355
[7] - http://github.com/evanphx/rubinius/issues/356
[8] - http://github.com/evanphx/rubinius/issues/347
[9] - mailto:mongrel-unicorn@rubyforge.org
[a] - mailto:unicorn@bogomips.org

v0.99.0

unicorn 0.99.0 - simplicity wins
Starting with this release, we'll always load Rack up front at
startup.

Previously we had complicated ways to avoid loading Rack until
after the application was loaded to allow the application to
load an alternate version of Rack.  However this has proven too
error-prone to be worth supporting even though Unicorn does not
have strict requirements on currently released Rack versions.

If an app requires a different version of Rack than what Unicorn
would load by default, it is recommended they only install that
version of Rack (and no others) since Unicorn does not have any
strict requirements on currently released Rack versions.

Rails 2.3.x users should be aware of this as those versions are
not compatible with Rack 1.1.0.

If it is not possible to only have one Rack version installed
"globally", then they should either use Isolate or Bundler and
install a private version of Unicorn along with their preferred
version of Rack.  Users who install in this way are recommended
to execute the isolated/bundled version of Unicorn, instead of
what would normally be in $PATH.

Feedback/tips to mailto:mongrel-unicorn@rubyforge.org from
Isolate and Bundler users would be greatly appreciated.

v0.98.0

unicorn 0.98.0
Deployments that suspend or hibernate servers should no longer
have workers killed off (and restarted) upon resuming.

For Linux users of {raindrops}[http://raindrops.bogomips.org/]
(v0.2.0+) configuration is easier as raindrops can now
automatically detect the active listeners on the server
via the new Unicorn.listener_names singleton method.

For the pedantic, chunked request bodies without trailers are no
longer allowed to omit the final CRLF.  This shouldn't affect
any real and RFC-compliant clients out there.  Chunked requests
with trailers have always worked and continue to work the same
way.

The rest are mostly small internal cleanups and documentation
fixes.  See the commit logs for full details.

v0.97.1

unicorn 0.97.1 - fix HTTP parser for Rainbows!/Zbatery
This release fixes a denial-of-service vector for derived
servers exposed directly to untrusted clients.

This bug does not affect most Unicorn deployments as Unicorn is
only supported with trusted clients (such as nginx) on a LAN.
nginx is known to reject clients that send invalid
Content-Length headers, so any deployments on a trusted LAN
and/or behind nginx are safe.

Servers affected by this bug include (but are not limited to)
Rainbows! and Zbatery.  This bug does not affect Thin nor
Mongrel, as neither got the request body filtering treatment
that the Unicorn HTTP parser got in August 2009.

The bug fixed in this release could result in a
denial-of-service as it would trigger a process-wide assertion
instead of raising an exception.  For servers such as
Rainbows!/Zbatery that serve multiple clients per worker
process, this could abort all clients connected to the
particular worker process that hit the assertion.

v0.97.0

unicorn 0.97.0 - polishing and cleaning up
A bunch of small fixes related to startup/configuration and hot
reload issues with HUP:

* Variables in the user-generated config.ru files no longer
  risk clobbering variables used in laucher scripts.

* signal handlers are initialized before the pid file is
  dropped, so over-eager firing of init scripts won't
  mysteriously nuke a process.

* SIGHUP will return app to original state if an updated
  config.ru fails to load due to {Syntax,Load}Error.

* unicorn_rails should be Rails 3 compatible out-of-the-box
  ('unicorn' works as always, and is recommended for Rails 3)

* unicorn_rails is finally "working_directory"-aware when
  generating default temporary paths and pid file

* config.ru encoding is the application's default in 1.9,
  not forced to binary like many parts of Unicorn.

* configurator learned to handle the "user" directive outside
  of after_fork hook (which will always remain supported).

There are also various internal cleanups and possible speedups.

v0.96.1

unicorn 0.96.1 - fix leak in Rainbows!/Zbatery
This maintenance release is intended for users of Rainbows! and
Zbatery servers (and anybody else using Unicorn::HttpParser).

This memory leak DID NOT affect Unicorn itself: Unicorn always
allocates the HttpParser once and always reuses it in every
sequential request.

This leak affects applications that repeatedly allocate a new
HTTP parser.  Thus this bug affects _all_ deployments of
Rainbows! and Zbatery.  These servers allocate a new parser for
every client connection to serve clients concurrently.

I misread the Data_Make_Struct()/Data_Wrap_Struct()
documentation and ended up passing NULL as the "free" argument
instead of -1, causing the memory to never be freed.

From README.EXT in the MRI source which I misread:
> The free argument is the function to free the pointer
> allocation.  If this is -1, the pointer will be just freed.
> The functions mark and free will be called from garbage
> collector.

v0.96.0

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!).

v0.95.3

unicorn 0.95.3
The HTTP parser now allows (but does not parse) the userinfo
component in the very rare requests that send absoluteURIs.
Thanks to Scott Chacon for reporting and submitting a test case
for this fix.

There are also minor documentation updates and tiny cleanups.

v0.95.2

unicorn 0.95.2
Small fixes to our HTTP parser to allows semicolons in PATH_INFO
as allowed by RFC 2396, section 3.3.  This is low impact for
existing apps as semicolons are rarely seen in URIs.  Our HTTP
parser runs properly under Rubinius 0.13.0 and 1.0.0-rc1 again
(though not yet the rest of the server since we rely heavily on
signals).

Another round of small documentation tweaks and minor cleanups.

v0.95.1

unicorn 0.95.1
Configuration files paths given on the command-line are no
longer expanded.  This should make configuration reloads
possible when a non-absolute path is specified for --config-file
and Unicorn was deployed to a symlink directories (as with
Capistrano).  Since deployments have always been strongly
encouraged to use absolute paths in the config file, this
change does not affect them.

This is our first gem release using gemcutter.

Eric Wong (3):
      SIGNALS: HUP + preload_app cannot reload app code
      Do not expand paths given on the shell
      GNUmakefile: prep release process for gemcutter
Something went wrong with that request. Please try again.