Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on May 20, 2015
  1. ISSUES: discourage HTML mail strongly, welcome nyms

    Eric Wong authored
    HTML email is too likely to be lost, so more strongly discourage it.
    While we're at it, make it clear we allow anonymous and pseudonymous
    contributions, unlike many projects nowadays.
  2. process SIGWINCH unless stdin is a TTY

    Eric Wong authored
    Some process managers such as foreman and daemontools rely on
    unicorn not daemonizing, but we still want to be able to process
    SIGWINCH in that case.
    
    stdout and stderr may be redirected to a pipe (for cronolog or
    similar process), so those are less likely to be attached to a TTY
    than stdin.  This also allows users to process SIGWINCH when running
    inside a regular terminal if they redirect stdin to /dev/null.
    
    Reported-by: Dan Moore <dan@vaporwa.re>
    References: <etPan.555b4293.5b47a5b7.e617@danbookpro>
    	<20150519232858.GA23515@dcvr.yhbt.net>
Commits on May 18, 2015
  1. FAQ: add note about ECONNRESET errors from bodies

    Eric Wong authored
    Thanks to Michael Fischer and Gabe Martin-Dempesy for bringing this
    to light on the mailing list.
    
    Ref: <CABHxtY7Sn5yaiR5a3gDk1G4XySE+UtfuqUTcOSdmwneXLD5rcg@mail.gmail.com>
    Ref: <FC91211E-FD32-432C-92FC-0318714C2170@zendesk.com>
    
    Cc: Michael Fischer <mfischer@zendesk.com>
    Cc: Gabe Martin-Dempesy <gabe@zendesk.com>
Commits on May 16, 2015
  1. avoid extra allocation for hijack proc creation

    Eric Wong authored
    proc creation is expensive, so merely use a 48-byte generic ivar
    hash slot for @socket instead.
  2. http_request: support rack.hijack by default

    Eric Wong authored
    Rack 1.4 and earlier will soon die out, so avoid having extra code
    
    The only minor overhead is assigning two hash slots and
    the extra hash checks when running ancient versions of Rack,
    so it is unlikely anybody cares about that overhead with Rack 1.5
    and later.
  3. Merge tag 'v4.9.0'

    Eric Wong authored
    unicorn 4.9.0 - TempfileReaper support in Rack 1.6
    
    This release supports the Rack::TempfileReaper middleware found
    in rack 1.6 for cleaning up disk space used by temporary files.
    We also use Rack::TempfileReaper for cleaning up large temporary
    files buffered with TeeInput.  Users on rack 1.5 and earlier
    will see no changes.
    
    There's also a bunch of documentation/build system improvements.
    
    This is likely to be the last Ruby 1.8-compatible release,
    unicorn 5.x will require 1.9.3 or later as well as dropping lots
    of cruft (the stupid "Status:" header in responses being the
    most notable).
    
    21 changes backported from master:
    
          ISSUES: update with mailing list subscription
          FAQ: add entry for Rails autoflush_log
          dev: remove isolate dependency
          unicorn.gemspec: depend on test-unit 3.0
          remove RubyForge and Freecode references
          remove mongrel.rubyforge.org references
          examples: add run_once to before_fork hook example
          t/t0002-parser-error.sh: relax test for rack 1.6.0
          switch docs + website to olddoc
          README: clarify/reduce references to unicorn_rails
          gemspec: fixup olddoc migration
          GNUmakefile: fix clean gem build + reduce build cruft
          doc: update support status for Ruby versions
          fix uninstalled testing and reduce require paths
          test_socket_helper: do not depend on SO_REUSEPORT
          ISSUES: add section for bugs in other projects
          explain 11 byte magic number for self-pipe
          Links: mark Rainbows! as historical, reference yahns
          doc: document UNICORN_FD in manpage
          tee_input: support for Rack::TempfileReaper middleware
          support TempfileReaper in deployment and development envs
    
    * tag 'v4.9.0': (22 commits)
      unicorn 4.9.0 - TempfileReaper support in Rack 1.6
      support TempfileReaper in deployment and development envs
      tee_input: support for Rack::TempfileReaper middleware
      doc: document UNICORN_FD in manpage
      Links: mark Rainbows! as historical, reference yahns
      explain 11 byte magic number for self-pipe
      ISSUES: add section for bugs in other projects
      test_socket_helper: do not depend on SO_REUSEPORT
      fix uninstalled testing and reduce require paths
      doc: update support status for Ruby versions
      GNUmakefile: fix clean gem build + reduce build cruft
      gemspec: fixup olddoc migration
      README: clarify/reduce references to unicorn_rails
      switch docs + website to olddoc
      t/t0002-parser-error.sh: relax test for rack 1.6.0
      examples: add run_once to before_fork hook example
      remove mongrel.rubyforge.org references
      remove RubyForge and Freecode references
      unicorn.gemspec: depend on test-unit 3.0
      dev: remove isolate dependency
      ...
Commits on May 7, 2015
  1. favor kgio_wait_readable for single FD over select

    Eric Wong authored
    kgio_wait_readable is superior for single FDs in that it may use the
    ppoll syscall on Linux via Ruby, making it immune to the slowdown
    high FDs with select() and the array allocations enforced by the
    Ruby wrapper interface.
    
    Note: IO#wait in the io/wait stdlib has the same effect, but as of
    2.2 still needlessly checks the FIONREAD ioctl.  So avoid needing to
    force a new require on users which also incur shared object loading
    costs.  The longer term plan is to rely entirely on Ruby IO
    primitives entirely and drop kgio, but that won't happen until we
    can depend on Ruby 2.3 for exception-free accept_nonblock
    (which will be released December 2015).
Commits on Apr 24, 2015
  1. unicorn 4.9.0 - TempfileReaper support in Rack 1.6

    Eric Wong authored
    This release supports the Rack::TempfileReaper middleware found
    in rack 1.6 for cleaning up disk space used by temporary files.
    We also use Rack::TempfileReaper for cleaning up large temporary
    files buffered with TeeInput.  Users on rack 1.5 and earlier
    will see no changes.
    
    There's also a bunch of documentation/build system improvements.
    
    This is likely to be the last Ruby 1.8-compatible release, unicorn 5.x
    will require 1.9.3 or later as well as dropping lots of cruft (the
    stupid "Status:" header in responses being the most notable).
    
    21 changes backported from master:
    
          ISSUES: update with mailing list subscription
          FAQ: add entry for Rails autoflush_log
          dev: remove isolate dependency
          unicorn.gemspec: depend on test-unit 3.0
          remove RubyForge and Freecode references
          remove mongrel.rubyforge.org references
          examples: add run_once to before_fork hook example
          t/t0002-parser-error.sh: relax test for rack 1.6.0
          switch docs + website to olddoc
          README: clarify/reduce references to unicorn_rails
          gemspec: fixup olddoc migration
          GNUmakefile: fix clean gem build + reduce build cruft
          doc: update support status for Ruby versions
          fix uninstalled testing and reduce require paths
          test_socket_helper: do not depend on SO_REUSEPORT
          ISSUES: add section for bugs in other projects
          explain 11 byte magic number for self-pipe
          Links: mark Rainbows! as historical, reference yahns
          doc: document UNICORN_FD in manpage
          tee_input: support for Rack::TempfileReaper middleware
          support TempfileReaper in deployment and development envs
  2. support TempfileReaper in deployment and development envs

    Eric Wong authored
    rack 1.6 added a TempfileReaper middleware to cleanup temporary
    files.  Enable it by default for users running rack 1.6 or later
    to avoid leaving temporary files around.
  3. tee_input: support for Rack::TempfileReaper middleware

    Eric Wong authored
    Rack::TempfileReaper was added in rack 1.6 to cleanup temporary
    files.  Make Unicorn::TmpIO ducktype-compatible so
    Rack::TempfileReaper may be used to free up space used by temporary
    buffer files.
    
    Ref: <CY1PR0301MB078011EB5A22B733EB222A45A4EE0@CY1PR0301MB0780.namprd03.prod.outlook.com>
    Reported-by: Mike Mulvaney <MMulvaney@bna.com>
  4. support TempfileReaper in deployment and development envs

    Eric Wong authored
    rack 1.6 added a TempfileReaper middleware to cleanup temporary
    files.  Enable it by default for users running rack 1.6 or later
    to avoid leaving temporary files around.
  5. tee_input: support for Rack::TempfileReaper middleware

    Eric Wong authored
    Rack::TempfileReaper was added in rack 1.6 to cleanup temporary
    files.  Make Unicorn::TmpIO ducktype-compatible so
    Rack::TempfileReaper may be used to free up space used by temporary
    buffer files.
    
    Ref: <CY1PR0301MB078011EB5A22B733EB222A45A4EE0@CY1PR0301MB0780.namprd03.prod.outlook.com>
    Reported-by: Mike Mulvaney <MMulvaney@bna.com>
Commits on Apr 22, 2015
  1. doc: document UNICORN_FD in manpage

    Eric Wong authored
    Due to the prevalence of socket activation in modern init systems,
    we shall document UNICORN_FD (previously an implementation detail)
    in the manpage.
  2. Links: mark Rainbows! as historical, reference yahns

    Eric Wong authored
    Pushing the boundaries of bad marketing :P
  3. explain 11 byte magic number for self-pipe

    Eric Wong authored
    Oops, this should've been explained long ago but apparently not.
    
    In response to a comment on
    http://www.sitepoint.com/the-self-pipe-trick-explained/
    
    > Does anybody know why both unicorn and foreman read 11 bytes from
    > self-pipe?
    
    Unfortunately I couldn't find a way to comment on the site on a
    JavaScript-free browser nor does it seem possible without
    registering.
    
    Again, anybody can send plain-text mail to:
    unicorn-public@bogomips.org
    
    No registration, no real name policy, no terms-of-service, just
    plain-text.  Feel free to use Tor, mixmaster or any anonymity
    service, too.
  4. ISSUES: add section for bugs in other projects

    Eric Wong authored
    This is not anything new, just documenting what has been going
    on since the beginning.
    
    There's been a small number of generic networking (or mm) bugs in
    the kernel which affect unicorn, but are usually found and fixed
    with more popular, non-Ruby servers, first.
    
    Aside from generic performance problems, I don't think there's ever
    been a glibc bug which affected unicorn.
  5. test_socket_helper: do not depend on SO_REUSEPORT

    Eric Wong authored
    Older Rubies (2.0) may not define SO_REUSEPORT even if the
    kernel and libc support it
  6. fix uninstalled testing and reduce require paths

    Eric Wong authored
    This fixes a bug introduced in
    commit fe83ead
    (GNUmakefile: fix clean gem build + reduce build cruft)
    which broke clean Ruby installations without an existing
    unicorn gem installed :x
    
    [fixed test/unit/test_http_parser_xftrust.rb for backport]
  7. doc: update support status for Ruby versions

    Eric Wong authored
    unicorn 5 will not support Ruby 1.8 anymore.
    
    Drop mentions of Rubinius, too, it's too difficult to support due to
    the proprietary and registration-required nature of its bug tracker.
    The smaller memory footprint and CoW-friendly memory allocator in
    mainline Ruby is a better fit for unicorn, anyways.
    
    Since Ruby 1.9+ bundles RubyGems and gem startup is faster nowadays,
    we'll just depend on that instead of not loading RubyGems.
    
    Drop the local.mk.sample file, too, since it's way out-of-date
    and probably isn't useful (I have not used it in a while).
    
    [reinstate 1.9 version check for listener_fds in backport]
  8. GNUmakefile: fix clean gem build + reduce build cruft

    Eric Wong authored
    Ensure we have a NEWS file for building the gem beforehand.
    We don't need to polute lib/ with object files, either.
  9. gemspec: fixup olddoc migration

    Eric Wong authored
    rdoc_options is no longer necesary with olddoc as olddoc can
    infer document titles and only generates cgit-compatible URLs
    to source code.
  10. README: clarify/reduce references to unicorn_rails

    Eric Wong authored
    unicorn_rails is an ancient compatibility wrapper for ancient
    versions of Rails which did not use Rack.  Those applications have
    likely moved on, so stop promoting unicorn_rails.
  11. switch docs + website to olddoc

    Eric Wong authored
    wrongdoc was difficult to maintain because of the tidy-ffi
    dependency and the HTML5 changes in Darkfish could not be
    handled well by Tidy.
    
    olddoc is superior as it generates leaner HTML which loads faster,
    requires less scrolling and less processing power to render.
    Aesthetic comparisons are subjective of course but completely
    unimportant compared to speed and accessibility.
    
    The presence of images and CSS on the old (Darkfish-based) site
    probably set unreasonable expectations as to my ability and
    willingness to view such things.  No more, the new website is
    entirely simple HTML which renders well with even the wimpiest
    browser.
  12. t/t0002-parser-error.sh: relax test for rack 1.6.0

    Eric Wong authored
    This overly zealous test was broken by:
    rack commit be28c6a2ac152fe4adfbef71f3db9f4200df89e8
    ("update HTTP status codes to IETF RFC 7231")
  13. examples: add run_once to before_fork hook example

    Eric Wong authored
    There may be code in a before_fork hook which should run only once,
    document an example using a guard variable since it may not be
    immediately obvious to all users.
    
    Inspired-by: Bráulio Bhavamitra <braulio@eita.org.br>
    
    http://bogomips.org/unicorn-public/m/20141004015707.GA1951@dcvr.yhbt.net.html
  14. remove mongrel.rubyforge.org references

    Eric Wong authored
    mongrel.rubyforge.org has been dead longer than rubyforge.org!
  15. remove RubyForge and Freecode references

    Eric Wong authored
    Both sites are gone.
  16. unicorn.gemspec: depend on test-unit 3.0

    Eric Wong authored
    test-unit 3 and minitest 5 will have equal support status as a
    bundled gems when Ruby 2.2.0 is released in December 2014.  These
    bundled gems will appear in the user-oriented tarball installations,
    but do not get installed by "make install" when installing Ruby
    from SVN or git.
    
    test-unit appears to be actively maintained and good at keeping
    backwards compatibility even on a major version change, so this
    means no code changes on our end.  I am not convinced switching to
    minitest is worth the effort.
    
    Cc: Ken Dreyer <ktdreyer@ktdreyer.com>
  17. dev: remove isolate dependency

    Eric Wong authored
    It seems unnecessary with current versions of RubyGems
    supporting development dependencies.
  18. FAQ: add entry for Rails autoflush_log

    Eric Wong authored
    Thanks to Cedric Maion for bringing this up on the mailing list:
    http://bogomips.org/unicorn-public/m/20140703144048.GA6674@cedric-maion.com
  19. ISSUES: update with mailing list subscription

    Eric Wong authored
    mlmmj seems quite usable and maintainable, so we'll run it.
Commits on Apr 7, 2015
  1. favor more string literals for cold call sites

    Eric Wong authored
    Literal regexps cost over 450 bytes of memory per-site and
    unnecessary use of them costs memory in places where raw execution
    speed does not matter.  Nowadays, we can rely on String#end_with?
    (introduced in 1.8.7) for improved readability, too.
Commits on Mar 12, 2015
  1. doc: document Etc.nprocessors for worker_processes

    Eric Wong authored
    Ruby 2.2 has Etc.nprocessors, and using that (directly or as a
    factor) for setting worker_processes is often (but not always)
    appropriate.
  2. doc: document UNICORN_FD in manpage

    Eric Wong authored
    Due to the prevalence of socket activation in modern init systems,
    we shall document UNICORN_FD (previously an implementation detail)
    in the manpage.
Commits on Mar 2, 2015
  1. socket_helper: update comments

    Eric Wong authored
    We had HTTPS support but dropped it(*) and some wacky servers out
    there do work better with TCP_DEFER_ACCEPT disabled.
    
    (*) No, we will not support HTTP/2, that is for nginx
Something went wrong with that request. Please try again.