Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 72 lines (58 sloc) 3.525 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
= Known Issues

Occasionally odd {issues}[link:ISSUES.html] arise without a transparent or
acceptable solution. Those issues are documented here.

* Under Ruby 1.9.1, methods like Array#shuffle and Array#sample will
  segfault if called after forking. This is fixed in trunk (r26936) and
  should be backported to the next 1.9.1 stable release (after p378).
  Until then, it is advisable to call "Kernel.rand" in your after_fork
  hook to reinitialize the random number generator.

  See http://redmine.ruby-lang.org/issues/show/2962 for more details

* When using "preload_app true", with apps using background threads
  need to restart them in the after_fork hook because threads are never
  shared with child processes. Additionally, any synchronization
  primitives (Mutexes, Monitors, ConditionVariables) should be
  reinitialized in case they are held during fork time to avoid
  deadlocks. The core Ruby Logger class needlessly uses a MonitorMutex
  which can be disabled with a {monkey patch}[link:examples/logger_mp_safe.rb]

* Rails 2.3.2 bundles its own version of Rack. This may cause subtle
  bugs when simultaneously loaded with the system-wide Rack Rubygem
  which Unicorn depends on. Upgrading to Rails 2.3.4 (or later) is
  strongly recommended for all Rails 2.3.x users for this (and security
  reasons). Rails 2.2.x series (or before) did not bundle Rack and are
  should be unnaffected. If there is any reason which forces your
  application to use Rails 2.3.2 and you have no other choice, then
  you may edit your Unicorn gemspec and remove the Rack dependency.

  ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
  Note: the workaround described in the article above only made
  the issue more subtle and we didn't notice them immediately.

* Installing "unicorn" as a system-wide Rubygem and using the
  {isolate}[http://github.com/jbarnette/isolate] gem may cause issues if
  you're using any of the bundled application-level libraries in
  unicorn/app/* (for compatibility with CGI-based applications, Rails <=
  2.2.2, or ExecCgi). For now workarounds include:

  * installing the same version of unicorn as a system-wide Rubygem
    _and_ isolating unicorn as well.
  * explicitly setting RUBYLIB or $LOAD_PATH to include any gem path
    where the unicorn gem is installed (e.g.
    /usr/lib/ruby/gems/1.8/gems/unicorn-VERSION/lib)

  With current versions of isolate, it is also recommended that you
  disable it with the <tt>before_exec</tt> hook prevent the PATH and
  RUBYOPT environment variable modifications from propagating between
  upgrades in your Unicorn config file:

        before_exec do |server|
          Isolate.disable
        end

  Future versions (unreleased as of 2010.04.20) of isolate will not
  require this as environment variable modifications will be idempotent.

* WONTFIX: code reloading and restarts with Sinatra 0.3.x (and likely older
  versions) apps is broken. The workaround is to force production
  mode to disable code reloading as well as disabling "run" in your
  Sinatra application:
    set :env, :production
    set :run, false
  Since this is no longer an issue with Sinatra 0.9.x apps, this will not be
  fixed on our end. Since Unicorn is itself the application launcher, the
  at_exit handler used in old Sinatra always caused Mongrel to be launched
  whenever a Unicorn worker was about to exit.

  Also remember we're capable of replacing the running binary without dropping
  any connections regardless of framework :)
Something went wrong with that request. Please try again.