=== 0.93.0 / 2009-10-02 21:04 UTC The one minor bugfix is only for Rails 2.3.x+ users who set the RAILS_RELATIVE_URL_ROOT environment variable in a config file. Users of the "--path" switch or those who set the environment variable in the shell were unaffected by this bug. Note that we still don't have relative URL root support for Rails < 2.3, and are unlikely to bother with it unless there is visible demand for it. New features includes support for :tries and :delay when specifying a "listen" in an after_fork hook. This was inspired by Chris Wanstrath's example of binding per-worker listen sockets in a loop while migrating (or upgrading) Unicorn. Setting a negative value for :tries means we'll retry the listen indefinitely until the socket becomes available. So you can do something like this in an after_fork hook: after_fork do |server, worker| addr = "127.0.0.1:#{9293 + worker.nr}" server.listen(addr, :tries => -1, :delay => 5) end There's also the usual round of added documentation, packaging fixes, code cleanups, small fixes and minor performance improvements that are viewable in the "git log" output. Eric Wong (55): build: hardcode the canonical git URL build: manifest dropped manpages build: smaller ChangeLog doc/LATEST: remove trailing newline http: don't force -fPIC if it can't be used .gitignore on *.rbc files Rubinius generates README/gemspec: a better description, hopefully GNUmakefile: add missing .manifest dep on test installs Add HACKING document configurator: fix user switch example in RDoc local.mk.sample: time and perms enforcement unicorn_rails: show "RAILS_ENV" in help message gemspec: compatibility with older Rubygems Split out KNOWN_ISSUES document KNOWN_ISSUES: add notes about the "isolate" gem gemspec: fix test_files regexp match gemspec: remove tests that fork from test_files test_signals: ensure we can parse pids in response GNUmakefile: cleanup test/manifest generation util: remove APPEND_FLAGS constant http_request: simplify and remove handle_body method http_response: simplify and remove const dependencies local.mk.sample: fix .js times TUNING: notes about benchmarking a high :backlog HttpServer#listen accepts :tries and :delay parameters "make install" avoids installing multiple .so objects Use Configurator#expand_addr in HttpServer#listen configurator: move initialization stuff to #initialize Remove "Z" constant for binary strings cgi_wrapper: don't warn about stdoutput usage cgi_wrapper: simplify status handling in response cgi_wrapper: use Array#concat instead of += server: correctly unset reexec_pid on child death configurator: update and modernize examples configurator: add colons in front of listen() options configurator: remove DEFAULT_LOGGER constant gemspec: clarify commented-out licenses section Add makefile targets for non-release installs cleanup: use question mark op for 1-byte comparisons RDoc for Unicorn::HttpServer::Worker small cleanup to pid file handling + documentation rails: RAILS_RELATIVE_URL_ROOT may be set in Unicorn config unicorn_rails: undeprecate --path switch manpages: document environment variables README: remove reference to different versions Avoid a small window when a pid file can be empty configurator: update some migration examples configurator: listen :delay must be Numeric test: don't rely on .manifest for test install SIGNALS: state that we stole semantics from nginx const: DEFAULT_PORT as a string doesn't make sense test_helper: unused_port rejects 8080 unconditionally GNUmakefile: SINCE variable may be unset tests: GIT-VERSION-GEN is a test install dependency unicorn 0.93.0 === 0.92.0 / 2009-09-18 21:40 UTC Small fixes and documentation are the focus of this release. James Golick reported and helped me track down a bug that caused SIGHUP to drop the default listener (0.0.0.0:8080) if and only if listeners were completely unspecified in both the command-line and Unicorn config file. The Unicorn config file remains the recommended option for specifying listeners as it allows fine-tuning of the :backlog, :rcvbuf, :sndbuf, :tcp_nopush, and :tcp_nodelay options. There are some documentation (and resulting website) improvements. setup.rb users will notice the new section 1 manpages for `unicorn` and `unicorn_rails`, Rubygems users will have to install manpages manually or use the website. The HTTP parser got a 3rd-party code review which resulted in some cleanups and one insignificant bugfix as a result. Additionally, the HTTP parser compiles, runs and passes unit tests under Rubinius. The pure-Ruby parts still do not work yet and we currently lack the resources/interest to pursue this further but help will be gladly accepted. The website now has an Atom feed for new release announcements. Those unfamiliar with Atom or HTTP may finger unicorn@bogomips.org for the latest announcements. Eric Wong (53): README: update with current version http: cleanup and avoid potential signedness warning http: clarify the setting of the actual header in the hash http: switch to macros for bitflag handling http: refactor keepalive tracking to functions http: use explicit elses for readability http: remove needless goto http: extra assertion when advancing p manually http: verbose assertions http: NIL_P(var) instead of var == Qnil http: rb_gc_mark already ignores immediates http: ignore Host: continuation lines with absolute URIs doc/SIGNALS: fix the no-longer-true bit about socket options "encoding: binary" comments for all sources (1.9) http_response: don't "rescue nil" for body.close CONTRIBUTORS: fix capitalization for why http: support Rubies without the OBJ_FROZEN macro http: define OFFT2NUM macro on Rubies without it http: no-op rb_str_modify() for Rubies without it http: compile with -fPIC http: use rb_str_{update,flush} if available http: create a new string buffer on empty values Update documentation for Rubinius support status http: cleanup assertion for memoized header strings http: add #endif comment labels where appropriate Add .mailmap file for "git shortlog" and other tools Update Manifest with mailmap Fix comment about speculative accept() SIGNALS: use "Unicorn" when referring to the web server Add new Documentation section for manpages test_exec: add extra tests for HUP and preload_app socket_helper: (FreeBSD) don't freeze the accept filter constant Avoid freezing objects that don't benefit from it SIGHUP no longer drops lone, default listener doc: generate ChangeLog and NEWS file for RDoc Remove Echoe and roll our own packaging/release... unicorn_rails: close parentheses in help message launchers: deprecate ambiguous -P/--p* switches man1/unicorn: avoid unnecessary emphasis Add unicorn_rails(1) manpage Documentation: don't force --rsyncable flag with gzip(1) Simplify and standardize manpages build/install GNUmakefile: package .tgz includes all generated files doc: begin integration of HTML manpages into RDoc Update TODO html: add Atom feeds doc: latest news is available through finger NEWS.atom: file timestamp matches latest entry pandoc needs the standalone switch for manpages man1/unicorn: split out RACK ENVIRONMENT section man1/unicorn_rails: fix unescaped underscore NEWS.atom.xml only lists the first 10 entries unicorn 0.92.0 === 0.91.0 / 2009-09-04 19:04 UTC HTTP/0.9 support, multiline header support, small fixes 18 years too late, Unicorn finally gets HTTP/0.9 support as HTTP was implemented in 1991. Eric Wong (16): Documentation updates examples/echo: "Expect:" value is case-insensitive http: make strings independent before modification http: support for multi-line HTTP headers tee_input: fix rdoc unicorn_http: "fix" const warning http: extension-methods allow any tokens http: support for simple HTTP/0.9 GET requests test_http_parser_ng: fix failing HTTP/0.9 test case launcher: defer daemonized redirects until config is read test to ensure stderr goes *somewhere* when daemonized http: SERVER_PROTOCOL matches HTTP_VERSION http: add HttpParser#headers? method Support HTTP/0.9 entity-body-only responses Redirect files in binary mode unicorn 0.91.0 === 0.90.0 / 2009-08-17 00:24 UTC switch chunking+trailer handling to Ragel, v0.8.4 fixes Moved chunked decoding and trailer parsing over to C/Ragel. Minor bug fixes, internal code cleanups, and API changes. Eric Wong (55): README: update version numbers for website Update Rails tests to run on Rails 2.3.3.1 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 unicorn 0.90.0 === 0.8.4 / 2009-08-06 22:48 UTC pass through unknown HTTP status codes 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[1] upstream to Rack but this issue may still affect users of yet-to-be-standardized status codes. Eric Wong (2): http_response: pass through unknown status codes unicorn 0.8.4 [1] - http://rack.lighthouseapp.com/projects/22435-rack/tickets/70 === 0.9.2 / 2009-07-20 01:29 UTC Ruby 1.9.2 preview1 compatibility This release mainly fixes compatibility issues the Ruby 1.9.2 preview1 release (and one existing 1.9.x issue). Note that Rails 2.3.2.1 does NOT appear to work with Ruby 1.9.2 preview1, but that is outside the scope of this project. The 0.9.x series (including this release) is only recommended for development/experimental use. This series is NOT recommended for production use, use 0.8.x instead. Eric Wong (10): README: add Gmane newsgroup info README: update about development/stable versions Rename unicorn/http11 => unicorn_http move all #gets logic to tee_input out of chunked_reader http_request: don't support apps that close env["rack.input"] HttpRequest: no need for a temporary variable Remove core Tempfile dependency (1.9.2-preview1 compat) fix tests to run correctly under 1.9.2preview1 app/exec_cgi: fix 1.9 compatibility unicorn 0.9.2 === 0.8.3 / 2009-07-20 01:26 UTC Ruby 1.9.2 preview1 compatibility This release fixes compatibility issues the Ruby 1.9.2 preview1 release (and one existing 1.9.x issue). Note that Rails 2.3.2.1 does NOT appear to work with Ruby 1.9.2 preview1, but that is outside the scope of this project. Eric Wong (4): Remove core Tempfile dependency (1.9.2-preview1 compat) fix tests to run correctly under 1.9.2preview1 app/exec_cgi: fix 1.9 compatibility unicorn 0.8.3 === 0.8.2 / 2009-07-09 08:59 UTC socket handling bugfixes and usability tweaks Socket handling bugfixes and socket-related usability and performance tweaks. We no longer trust FD_CLOEXEC to be inherited across accept(); thanks to Paul Sponagl for diagnosing this issue on OSX. There are also minor tweaks backported from 0.9.0 to make non-graceful restarts/upgrades go more smoothly. Eric Wong (6): Unbind listeners as before stopping workers Retry listen() on EADDRINUSE 5 times every 500ms Re-add support for non-portable socket options Minor cleanups to core always set FD_CLOEXEC on sockets post-accept() unicorn 0.8.2 === 0.9.1 / 2009-07-09 08:49 UTC FD_CLOEXEC portability fix (v0.8.2 port) Minor cleanups, set FD_CLOEXEC on accepted listen sockets instead of relying on the flag to be inherited across accept. The 0.9.x series (including this release) is NOT recommended for production use, try 0.8.x instead. Eric Wong (10): Avoid temporary array creation Favor Struct members to instance variables Minor cleanups to core Unbind listeners as before stopping workers Retry listen() on EADDRINUSE 5 times ever 500ms Re-add support for non-portable socket options Minor cleanups to core (cherry picked from commit ec70433f84664af0dff1336845ddd51f50a714a3) always set FD_CLOEXEC on sockets post-accept() unicorn 0.8.2 unicorn 0.9.1 (merge 0.8.2) === 0.9.0 / 2009-07-01 22:24 UTC bodies: "Transfer-Encoding: chunked", rewindable streaming We now have support for "Transfer-Encoding: chunked" bodies in requests. Not only that, Rack applications reading input bodies get that data streamed off to the client socket on an as-needed basis. This allows the application to do things like upload progress notification and even tunneling of arbitrary stream protocols via bidirectional chunked encoding. See Unicorn::App::Inetd and examples/git.ru (including the comments) for an example of tunneling the git:// protocol over HTTP. This release also gives applications the ability to respond positively to "Expect: 100-continue" headers before being rerun without closing the socket connection. See Unicorn::App::Inetd for an example of how this is used. This release is NOT recommended for production use. Eric Wong (43): http_request: no need to reset the request http_request: StringIO is binary for empty bodies (1.9) http_request: fix typo for 1.9 Transfer-Encoding: chunked streaming input support Unicorn::App::Inetd: reinventing Unix, poorly :) README: update with mailing list info local.mk.sample: publish_doc gzips all html, js, css Put copyright text in new files, include GPL2 text examples/cat-chunk-proxy: link to proposed curl(1) patch Update TODO Avoid duplicating the "Z" constant Optimize body-less GET/HEAD requests (again) tee_input: Don't expose the @rd object as a return value exec_cgi: small cleanups README: another note about older Sinatra tee_input: avoid defining a @rd.size method Make TeeInput easier to use test_upload: add tests for chunked encoding GNUmakefile: more stringent error checking in tests test_upload: fix ECONNRESET with 1.9 GNUmakefile: allow TRACER= to be specified for tests test_rails: workaround long-standing 1.9 bug tee_input: avoid rereading fresh data "Fix" tests that break with stream_input=false inetd: fix broken constant references configurator: provide stream_input (true|false) option chunked_reader: simpler interface http_request: force BUFFER to be Encoding::BINARY ACK clients on "Expect: 100-continue" header Only send "100 Continue" when no body has been sent http_request: tighter Transfer-Encoding: "chunked" check Add trailer_parser for parsing trailers chunked_reader: Add test for chunk parse failure TeeInput: use only one IO for tempfile trailer_parser: set keys with "HTTP_" prefix TrailerParser integration into ChunkedReader Unbind listeners as before stopping workers Retry listen() on EADDRINUSE 5 times ever 500ms Re-add support for non-portable socket options Move "Expect: 100-continue" handling to the app tee_input: avoid ignoring initial body blob Force streaming input onto apps by default unicorn 0.9.0 === 0.8.1 / 2009-05-28 21:45 UTC safer timeout handling, more consistent reload behavior This release features safer, more descriptive timeout handling, more consistent reload behavior, and is a miniscule amount faster on "Hello World" benchmarks Eric Wong (7): doc: cleanup summary/description Fix potential race condition in timeout handling SIGHUP reloads app even if preload_app is true Make our HttpRequest object a global constant Avoid instance variables lookups in a critical path Consistent logger assignment for multiple objects unicorn 0.8.1 === 0.8.0 / 2009-05-26 22:59 UTC enforce Rack dependency, minor performance improvements and fixes The RubyGem now has a hard dependency on Rack. Minor performance improvements and code cleanups. If RubyGems are in use, the Gem index is refreshed when SIGHUP is issued. Eric Wong (66): test_request: enable with Ruby 1.9 now Rack 1.0.0 is out Small cleanup test_upload: still uncomfortable with 1.9 IO encoding... Add example init script app/exec_cgi: GC prevention Add TUNING document Make speculative accept() faster for the common case app/old_rails: correctly log errors in output http_request: avoid StringIO.new for GET/HEAD requests http_response: luserspace buffering is barely faster benchmark/*: updates for newer versions of Unicorn http_request: switch to readpartial over sysread No point in unsetting the O_NONBLOCK flag Merge commit 'origin/benchmark' Safer timeout handling and test case Ignore unhandled master signals in the workers TUNING: add a note about somaxconn with UNIX sockets Remove redundant socket closing/checking Instant shutdown signals really mean instant shutdown test_signals: ready workers before connecting Speed up the worker accept loop Fix a warning about @pid being uninitialized Inline and remove the HttpRequest#reset method Preserve 1.9 IO encodings in reopen_logs configurator: fix rdoc formatting http_request: use Rack::InputWrapper-compatible methods app/exec_cgi: use explicit buffers for read/sysread Enforce minimum timeout at 3 seconds Avoid killing sleeping workers Remove trickletest HttpRequest::DEF_PARAMS => HttpRequest::DEFAULTS exec_cgi: don't assume the body#each consumer is a socket Reopen master logs on SIGHUP, too Require Rack for HTTP Status codes http_response: allow string status codes test_response: correct OFS test privatize constants only used by old_rails/static Disable formatting for command-line switches GNUmakefile: glob all files in bin/* test_request: enable with Ruby 1.9 now Rack 1.0.0 is out test_upload: still uncomfortable with 1.9 IO encoding... Add example init script app/exec_cgi: GC prevention Add TUNING document app/old_rails: correctly log errors in output Safer timeout handling and test case Ignore unhandled master signals in the workers TUNING: add a note about somaxconn with UNIX sockets Fix a warning about @pid being uninitialized Preserve 1.9 IO encodings in reopen_logs configurator: fix rdoc formatting Enforce minimum timeout at 3 seconds http_response: allow string status codes test_response: correct OFS test Disable formatting for command-line switches GNUmakefile: glob all files in bin/* Merge branch '0.7.x-stable' Define HttpRequest#reset if missing Merge branch 'benchmark' unicorn 0.7.1 Merge commit 'v0.7.1' Refresh Gem list when building the app Only refresh the gem list when building the app Switch to autoload to defer requires remove trickletest from Manifest unicorn 0.8.0 === 0.7.1 / 2009-05-22 09:06 UTC minor fixes, cleanups and documentation improvements Eric Wong (18): test_request: enable with Ruby 1.9 now Rack 1.0.0 is out test_upload: still uncomfortable with 1.9 IO encoding... Add example init script app/exec_cgi: GC prevention Add TUNING document app/old_rails: correctly log errors in output Safer timeout handling and test case Ignore unhandled master signals in the workers TUNING: add a note about somaxconn with UNIX sockets Fix a warning about @pid being uninitialized Preserve 1.9 IO encodings in reopen_logs configurator: fix rdoc formatting Enforce minimum timeout at 3 seconds http_response: allow string status codes test_response: correct OFS test Disable formatting for command-line switches GNUmakefile: glob all files in bin/* unicorn 0.7.1 === 0.7.0 / 2009-04-25 18:59 UTC rack.version is 1.0 Rack 1.0.0 compatibility, applications are now passed env["rack.version"] == [1, 0] Eric Wong (5): doc: formatting changes for SIGNALS doc configurator: "listen" directive more nginx-like Fix log rotation being delayed in workers when idle Rack 1.0.0 compatibility unicorn 0.7.0 === 0.6.0 / 2009-04-24 21:47 UTC cleanups + optimizations, signals to {in,de}crement processes * Mostly OCD-induced yak-shaving changes * SIGTTIN and SIGTTOU are now used to control incrementing and decrementing of worker processes without needing to change the config file and SIGHUP. Eric Wong (46): test_upload: ensure StringIO objects are binary http11: cleanup #includes and whitespace GNUmakefile: Fix ragel dependencies GNUmakefile: kill trailing whitespace after ragel Move absolute URI parsing into HTTP parser http11: remove unused variables/elements http_request: freeze modifiable elements HttpParser: set QUERY_STRING for Rack-compliance GNUmakefile: mark test_signals as a slow test const: remove unused QUERY_STRING constant http11: formatting cleanups http11: remove callbacks from structure replace DATA_GET macro with a function http11: minor cleanups in return types http11: make parser obey HTTP_HOST with empty port http11: cleanup some CPP macros http11: rfc2616 handling of absolute URIs http_response: small speedup by eliminating loop Stop extending core classes rename socket.rb => socket_helper.rb Remove @start_ctx instance variable http11: support underscores in URI hostnames test: empty port test for absolute URIs Cleanup some unnecessary requires Cleanup GNUmakefile and fix dependencies Fix data corruption with small uploads via browsers Get rid of UNICORN_TMP_BASE constant GNUmakefile: mark test_upload as a slow test unicorn_rails: avoid nesting lambdas test_exec: cleanup stale socket on exit Merge commit 'v0.5.4' http_request: micro optimizations IO_PURGATORY should be a global constant Make LISTENERS and WORKERS global constants, too test_socket_helper: disable GC for this test http_response: just barely faster http_response: minor performance gains make SELF_PIPE is a global constant Describe the global constants we use. Fixup reference to a dead variable Avoid getppid() if serving heavy traffic minor cleanups and save a few variables Allow std{err,out}_path to be changed via HUP SIGTT{IN,OU} {in,de}crements worker_processes cleanup: avoid duped self-pipe init/replacement logic unicorn 0.6.0 === 0.5.4 / 2009-04-24 01:41 UTC fix data corruption with some small uploads (not curl) Eric Wong (2): Fix data corruption with small uploads via browsers unicorn 0.5.4 === 0.5.3 / 2009-04-17 05:32 UTC fix 100% CPU usage when idle, small cleanups fix 100% CPU usage when idle Eric Wong (7): update Manifest (add test_signals.rb) Fix forgotten Rails tests Fix my local.mk file to always run Rails tests fix 100% CPU usage when idle remove DATE constant Small garbage reduction in HttpResponse unicorn 0.5.3 === 0.5.2 / 2009-04-16 23:32 UTC force Status: header for compat, small cleanups * Ensure responses always have the "Status:" header. This is needed for compatibility with some broken clients. * Other small and minor cleanups Eric Wong (10): Explicitly trap SIGINT/SIGTERM again s/rotating/reopening/g in log messages before_commit and before_exec can never be nil/false worker_loop cleanups, var golf, and yak-shaving http11: default server port is 443 for https ensure responses always have the "Status:" header test: fix dependency issue with "make test-unit" GNUmakefile: small dependency cleanups unicorn/const: kill trailing whitespace unicorn 0.5.2 === 0.5.1 / 2009-04-13 21:24 UTC exit correctly on INT/TERM, QUIT is still recommended, however We now exit correctly on INT/TERM signals, QUIT is still recommended as it does graceful shutdowns. Eric Wong (2): Fix SIGINT/SIGTERM handling (broken in 0.5.0) unicorn 0.5.1 === 0.5.0 / 2009-04-13 19:08 UTC {after,before}_fork API change, small tweaks/fixes * There is an API change in the {after,before}_fork hooks so now the entire Worker struct is exposed to the user. This allows Unicorn to unofficially support user/group privilege changing. * The "X-Forwarded-Proto:" header can be set by proxies to ensure rack.url_scheme is "https" for SSL-enabled sites. * Small cleanups and tweaks throughout, see shortlog (below) or changelog for details. Eric Wong (32): test_helper: redirect_io uses append and sync configurator: allow hooks to be passed callable objects Add a test for signal recovery Documentation updates Enforce umask 0000 with UNIX domain sockets local.mk: touch files after set-file-times Add test for :preload_app config option GNUmakefile: remove unnecessary asterisks in output GNUmakefile: allow "make V=1 ..." for verbosity test_configurator: rename test name that never ran cleanup some log messages test_request: tests esoteric/rare REQUEST_URIs http11: Remove qsort/bsearch code paths http11: handle "X-Forwarded-Proto: https" close listeners when removing them from our array config: handle listener unbind/replace in config file README: doc updates Restore unlinked UNIX sockets on SIGHUP listen backlog, sndbuf, rcvbuf are always changeable Remove _all_ non-POSIX socket options http11: cleanup+safer rack.url_scheme handling test_exec: fix potential races in fd leak test test_http_parser: fix broken URL in comment Save one fcntl() syscall on every request Remove unnecessary sync assignment Don't bother restoring ENV or umask across reexec old_rails: try harder to ensure valid responses small cleanups in signal handling and worker init Remove unnecessary local variables in process_client Expose worker to {before,after}_fork hooks Configurator: add example for user/group switching unicorn 0.5.0 === 0.4.2 / 2009-04-02 19:14 UTC fix Rails ARStore, FD leak prevention, descriptive proctitles Eric Wong (16): Manifest: updates Merge unicorn test_exec: add test case for per-worker listeners Remove set_cloexec wrapper and require FD_CLOEXEC All IOs created in workers have FD_CLOEXEC set FD_CLOEXEC all non-listen descriptors before exec Close std{err,out} redirection targets test_upload: fix a race condition in unlink test More descriptive process titles unicorn_rails: cleanup redundant bits test/rails: v2.1.2 + ActiveRecordStore all around Use File.basename instead of a regexp Add log directories to tests unicorn: remove unnecessary lambda generation GNUmakefile: "install" preserves unicorn_rails unicorn 0.4.2 === 0.4.1 / 2009-04-01 10:52 UTC Rails support, per-listener backlog and {snd,rcv}buf Eric Wong (50): All new benchmarks, old ones removed benchmark: header values must be strings Merge commit 'origin/benchmark' into release HttpResponse: speed up non-multivalue headers Streamline rack environment generation Don't bother unlinking UNIX sockets unicorn_rails: support non-Rack versions of Rails HttpRequest: small improvement for GET requests simplify the HttpParser interface Socket: add {snd,rcv}buf opts to bind_listen Merge commit 'v0.2.3' Don't allow failed log rotation to to break app Deferred log rotation in workers style: symbols instead of strings for signal names No need to disable luserspace buffering on client socket test_server: quieter tests Remove needless line break Always try to send a valid HTTP response back test_response: ensure closed socket after write test_response: ensure response body is closed TODO: update roadmap to 1.0.0 configurator: per-listener backlog, {rcv,snd}buf config configurator: favor "listen" directive over "listeners" http11: use :http_body instead of "HTTP_BODY" Avoid having two pid files pointing to the same pid test_exec: fix race conditions test_exec: fix response bodies Fix default listener setup test_exec: fix another race condition bin/*: parse CLI switches in config.ru sooner app/old_rails/static: define missing constant unicorn_rails: give more info when aborting GNUmakefile: add test-exec and test-unit targets cgi_wrapper: ensure "Status:" header is not set Better canonicalization of listener paths + tests configurator: remove unnecessary SocketHelper include unicorn_rails: minor cleanup for dead variable Use {read,write}_nonblock on the pipe unicorn_rails: cleanup path mapping usage Rails stack tests for unicorn_rails test: factor out exec helpers into common code for Rails tests cgi_wrapper: fix cookies and other headers GNUmakefile: prefix errors with $(extra) variable cgi_wrapper: HTTP status code cleanups Add more tests for Rails test_rails: 4x speedup Manifest update Documentation updates, prep for 0.4.1 release Add local.mk.sample file that I use unicorn 0.4.1 === 0.2.3 / 2009-03-25 23:31 UTC Unlink Tempfiles after use (they were closed, just not unlinked) Eric Wong (3): Don't bother unlinking UNIX sockets Ensure Tempfiles are unlinked after every request unicorn 0.2.3 === 0.2.2 / 2009-03-22 23:45 UTC small bug fixes, fix Rack multi-value headers (Set-Cookie:) Eric Wong (19): Fix link to Rubyforge releases page start libifying common launcher code unicorn_rails: fix standard pid path setup Move listen path and address expansion to Configurator Trap WINCH to QUIT children without respawning Remove Mongrel stuff from CHANGELOG HttpResponse: close body if it can close Add Unicorn::App::ExecCgi Process management cleanups documentation/disclaimer updates unicorn_rails: remove unnecessary Rack-loading logic unicorn/http11: remove GATEWAY_INTERFACE http11: don't set headers Rack doesn't like HttpRequest test so our requests pass Rack::Lint HttpRequest: correctly reference logger Rotate master logs before workers. Simplify code for sleeping/waking up the master Handle Rack multivalue headers correctly unicorn 0.2.2 === 0.2.1 / 2009-03-19 03:20 UTC Fix broken Manifest that cause unicorn_rails to not be bundled Eric Wong (1): unicorn v0.2.1, fix the Manifest === 0.2.0 / 2009-03-19 03:16 UTC unicorn_rails launcher script. Eric Wong (8): Start _Known Issues_ section in README Allow binding to UNIX sockets relative to "~" tests: do not trust (our correct use of) 1.9 encodings gracefully die if working dir is invalid at fork Add signal queueing for test reliability Add unicorn_rails script for Rails 2.3.2 Documentation updates, prepare for 0.2.0 unicorn 0.2.0 === 0.1.0 / 2009-03-11 01:50 UTC Unicorn - UNIX-only fork of Mongrel free of threading initial