<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://unicorn.bogomips.org/NEWS.atom.xml</id>
  <title>Unicorn news</title>
  <subtitle>Rack HTTP server for Unix and fast clients</subtitle>
  <link type="text/html" rel="alternate" href="http://unicorn.bogomips.org/NEWS.html"/>
  <updated>2010-03-01T18:26:38Z</updated>
  <entry>
    <title>unicorn 0.97.0 - polishing and cleaning up</title>
    <updated>2010-03-01T18:26:38Z</updated>
    <published>2010-03-01T18:26:38Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.97.0"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.97.0</id>
    <content type="text">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.</content>
    <content type="xhtml">
      <pre>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.
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.96.1 - fix leak in Rainbows!/Zbatery</title>
    <updated>2010-02-13T08:35:51Z</updated>
    <published>2010-02-13T08:35:51Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.96.1"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.96.1</id>
    <content type="text">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:
&gt; The free argument is the function to free the pointer
&gt; allocation.  If this is -1, the pointer will be just freed.
&gt; The functions mark and free will be called from garbage
&gt; collector.</content>
    <content type="xhtml">
      <pre>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:
&gt; The free argument is the function to free the pointer
&gt; allocation.  If this is -1, the pointer will be just freed.
&gt; The functions mark and free will be called from garbage
&gt; collector.
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.96.0 - Rack 1.1 bump</title>
    <updated>2010-01-08T05:18:55Z</updated>
    <published>2010-01-08T05:18:55Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.96.0"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.96.0</id>
    <content type="text">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!).</content>
    <content type="xhtml">
      <pre>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!).
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.95.3</title>
    <updated>2009-12-21T21:51:40Z</updated>
    <published>2009-12-21T21:51:40Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.3"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.3</id>
    <content type="text">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.</content>
    <content type="xhtml">
      <pre>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.
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.95.2</title>
    <updated>2009-12-07T09:52:08Z</updated>
    <published>2009-12-07T09:52:08Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.2"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.2</id>
    <content type="text">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.</content>
    <content type="xhtml">
      <pre>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.
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.95.1</title>
    <updated>2009-11-21T21:13:13Z</updated>
    <published>2009-11-21T21:13:13Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.1"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.1</id>
    <content type="text">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.</content>
    <content type="xhtml">
      <pre>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
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.95.0</title>
    <updated>2009-11-15T22:21:16Z</updated>
    <published>2009-11-15T22:21:16Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.0"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.95.0</id>
    <content type="text">Mostly internal cleanups and documentation updates.  Irrelevant
stacktraces from client disconnects/errors while reading
"rack.input" are now cleared to avoid unnecessary noise.  If
user switching in workers is used, ownership of logs is now
preserved when reopening worker logs (send USR1 only to the the
master in this case).  The timeout config no longer affects long
after_fork hooks or application startups.

New features include the addition of the :umask option for the
"listen" config directive and error reporting for non-portable
socket options.

No ponies have ever been harmed in our development.</content>
    <content type="xhtml">
      <pre>Mostly internal cleanups and documentation updates.  Irrelevant
stacktraces from client disconnects/errors while reading
"rack.input" are now cleared to avoid unnecessary noise.  If
user switching in workers is used, ownership of logs is now
preserved when reopening worker logs (send USR1 only to the the
master in this case).  The timeout config no longer affects long
after_fork hooks or application startups.

New features include the addition of the :umask option for the
"listen" config directive and error reporting for non-portable
socket options.

No ponies have ever been harmed in our development.

Eric Wong (28):
      unicorn.1: document RACK_ENV changes in 0.94.0
      HACKING: update with "gmake" in examples
      don't nuke children for long after_fork and app loads
      local.mk.sample: steal some updates from Rainbows!
      Load Unicorn constants when building app
      tee_input: fix RDoc argument definition for tee
      Add FAQ
      FAQ: fix links to Configurator docs
      tee_input: better premature disconnect handling
      tee_input: don't shadow struct members
      raise Unicorn::ClientShutdown if client aborts in TeeInput
      tee_input: fix comment from an intermediate commit
      FAQ: additional notes on getting HTTPS redirects right
      configurator: update RDoc and comments in examples
      bump version to 0.95.0pre
      configurator: listen :umask parameter for UNIX sockets
      preserve user/group ownership when reopening logs
      old_rails/static: avoid freezing strings
      old_rails: autoload Static
      const: no need to freeze HTTP_EXPECT
      test_server: ensure stderr is written to before reading
      tee_input: expand client error handling
      replace "rescue =&gt; e" with "rescue Object =&gt; e"
      socket_helper: do not hide errors when setting socket options
      socket_helper: RDoc for constants
      ClientShutdown: RDoc
      Rakefile: add raa_update task
      tee_input: client_error always raises
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.94.0</title>
    <updated>2009-11-05T09:52:02Z</updated>
    <published>2009-11-05T09:52:02Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.94.0"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.94.0</id>
    <content type="text">The HTTP parser is fix for oddly-aligned reads of trailers (this
technically affects headers, too, but is highly unlikely due to
our non-support of slow clients).  This allows our HTTP parser
to better support very slow clients when used by other servers
(like Rainbows!).  Fortunately this bug does not appear to lead
to any invalid memory accesses (and potential arbitrary code
execution).

FreeBSD (and possibly other *BSDs) support is improved and and
all the test cases pass under FreeBSD 7.2.  Various flavors of
GNU/Linux remains our primary platform for development and
production.

New features added include the "working_directory" directive in
the configurator .  Even without specifying a
"working_directory", symlink-aware detection of the current path
no longer depends on /bin/sh so it should work out-of-the-box on
FreeBSD and Solaris and not just systems where /bin/sh is dash,
ksh93 or bash.

User-switching support is finally supported but only intended
for use in the after_fork hook of worker processes.  Putting it
in the after_fork hook allows allows users to set things like
CPU affinity[1] on a per-worker basis before dropping
privileges.  The master process retains all privileges it
started with.

The ENV["RACK_ENV"] (process-wide) environment variable is now
both read and set for `unicorn' in the same way RAILS_ENV is
used by `unicorn_rails'.  This allows the Merb launcher to read
ENV["RACK_ENV"] in config.ru.  Other web servers already set
this and there may be applications or libraries that already
rely on this de facto standard.</content>
    <content type="xhtml">
      <pre>The HTTP parser is fix for oddly-aligned reads of trailers (this
technically affects headers, too, but is highly unlikely due to
our non-support of slow clients).  This allows our HTTP parser
to better support very slow clients when used by other servers
(like Rainbows!).  Fortunately this bug does not appear to lead
to any invalid memory accesses (and potential arbitrary code
execution).

FreeBSD (and possibly other *BSDs) support is improved and and
all the test cases pass under FreeBSD 7.2.  Various flavors of
GNU/Linux remains our primary platform for development and
production.

New features added include the "working_directory" directive in
the configurator .  Even without specifying a
"working_directory", symlink-aware detection of the current path
no longer depends on /bin/sh so it should work out-of-the-box on
FreeBSD and Solaris and not just systems where /bin/sh is dash,
ksh93 or bash.

User-switching support is finally supported but only intended
for use in the after_fork hook of worker processes.  Putting it
in the after_fork hook allows allows users to set things like
CPU affinity[1] on a per-worker basis before dropping
privileges.  The master process retains all privileges it
started with.

The ENV["RACK_ENV"] (process-wide) environment variable is now
both read and set for `unicorn' in the same way RAILS_ENV is
used by `unicorn_rails'.  This allows the Merb launcher to read
ENV["RACK_ENV"] in config.ru.  Other web servers already set
this and there may be applications or libraries that already
rely on this de facto standard.

Eric Wong (26):
      cleanup: avoid redundant error checks for fstat
      test_helper: connect(2) may fail with EINVAL
      GNUmakefile: fix non-portable tar(1) usage
      tests: provide a pure Ruby setsid(8) equivalent
      more portable symlink awareness for START_CTX[:cwd]
      test_signals: avoid portability issues with fchmod(2)
      cleanup error handling and make it less noisy
      Do not override Dir.chdir in config files
      configurator: add "working_directory" directive
      configurator: working_directory is expanded
      configurator: set ENV["PWD"] with working_directory, too
      configurator: working_directory affects pid, std{err,out}_paths
      configurator: update documentation for working_directory
      TODO: remove working_directory bit, done
      Util.reopen_logs: remove needless Range
      worker: user/group switching for after_fork hooks
      Fix autoload of Etc in Worker for Ruby 1.9
      bin/unicorn: allow RACK_ENV to be passed from parent
      tests for RACK_ENV preservation
      http: allow headers/trailers to be written byte-wise
      http: extra test for bytewise chunked bodies
      tee_input: do not clobber trailer buffer on partial uploads
      test_exec: ensure master is killed after test
      Util::tmpio returns a TmpIO that responds to #size
      TODO: remove user-switching bit, done
      unicorn 0.94.0

Wayne Larsen (1):
      bin/unicorn: set ENV["RACK_ENV"] on startup

[1] - Unicorn does not support CPU affinity directly, but it is
      possible to load code that allows it inside after_fork hooks,
      or even just call sched_tool(8).
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.93.5</title>
    <updated>2009-10-29T21:41:51Z</updated>
    <published>2009-10-29T21:41:51Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.93.5"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.93.5</id>
    <content type="text">This release fixes a regression introduced in 0.93.3 where
timed-out worker processes run a chance of not being killed off
at all if they're hung.  While it's not ever advisable to have
requests take a long time, we realize it's easy to fix
everything :)</content>
    <content type="xhtml">
      <pre>This release fixes a regression introduced in 0.93.3 where
timed-out worker processes run a chance of not being killed off
at all if they're hung.  While it's not ever advisable to have
requests take a long time, we realize it's easy to fix
everything :)

Eric Wong (3):
      TODO: remove --kill
      fix reliability of timeout kills
      TODO: update for next version (possibly 1.0-pre)
</pre>
    </content>
  </entry>
  <entry>
    <title>unicorn 0.93.4</title>
    <updated>2009-10-27T07:57:15Z</updated>
    <published>2009-10-27T07:57:15Z</published>
    <author>
      <name>Eric Wong</name>
      <email>normalperson@yhbt.net</email>
    </author>
    <link type="text/html" rel="alternate" href="http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.93.4"/>
    <id>http://git.bogomips.org/cgit/unicorn.git/tag/?id=v0.93.4</id>
    <content type="text">This release mainly works around BSD stdio compatibility issues
that affect at least FreeBSD and OS X.  While this issues was
documented and fixed in [ruby-core:26300][1], no production
release of MRI 1.8 has it, and users typically upgrade MRI more
slowly than gems.  This issue does NOT affect 1.9 users.  Thanks
to Vadim Spivak for reporting and testing this issue and Andrey
Stikheev for the fix.

Additionally there are small documentation bits, one error
handling improvement, and one minor change that should improve
reliability of signal delivery.</content>
    <content type="xhtml">
      <pre>This release mainly works around BSD stdio compatibility issues
that affect at least FreeBSD and OS X.  While this issues was
documented and fixed in [ruby-core:26300][1], no production
release of MRI 1.8 has it, and users typically upgrade MRI more
slowly than gems.  This issue does NOT affect 1.9 users.  Thanks
to Vadim Spivak for reporting and testing this issue and Andrey
Stikheev for the fix.

Additionally there are small documentation bits, one error
handling improvement, and one minor change that should improve
reliability of signal delivery.

Andrey Stikheev (1):
      workaround FreeBSD/OSX IO bug for large uploads

Eric Wong (7):
      DESIGN: address concerns about on-demand and thundering herd
      README: alter reply conventions for the mailing list
      configurator: stop testing for non-portable listens
      KNOWN_ISSUES: document Rack gem issue w/Rails 2.3.2
      stop continually resends signals during shutdowns
      add news bodies to site NEWS.atom.xml
      configurator: fix broken example in RDoc

Suraj N. Kurapati (1):
      show configuration file path in errors instead of '(eval)'

[1] http://redmine.ruby-lang.org/issues/show/2267
</pre>
    </content>
  </entry>
</feed>
