unicorn 3.7.0 - minor feature update
[unicorn.git] / KNOWN_ISSUES
blob2bd4151c6e8930a4c9dd579051bc678c61806c53
1 = Known Issues
3 Occasionally odd {issues}[link:ISSUES.html] arise without a transparent or
4 acceptable solution.  Those issues are documented here.
6 * PRNGs (pseudo-random number generators) loaded before forking
7   (e.g. "preload_app true") may need to have their internal state
8   reset in the after_fork hook.  Starting with \Unicorn 3.6.1, we
9   have builtin workarounds for Kernel#rand and OpenSSL::Random users,
10   but applications may use other PRNGs.
12 * Under some versions of Ruby 1.8, it is necessary to call +srand+ in an
13   after_fork hook to get correct random number generation.  We have a builtin
14   workaround for this starting with \Unicorn 3.6.1
16   See http://redmine.ruby-lang.org/issues/show/4338
18 * On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken
19   stdio that causes failure for file uploads larger than 112K.  Upgrade
20   your version of Ruby or continue using Unicorn 1.x/3.4.x.
22 * For notes on sandboxing tools such as Bundler or Isolate,
23   see the {Sandbox}[link:Sandbox.html] page.
25 * nginx with "sendfile on" under FreeBSD 8 is broken when
26   uploads are buffered to disk.  Disabling sendfile is required to
27   work around this bug which should be fixed in newer versions of FreeBSD.
29 * When using "preload_app true", with apps using background threads
30   need to restart them in the after_fork hook because threads are never
31   shared with child processes.  Additionally, any synchronization
32   primitives (Mutexes, Monitors, ConditionVariables) should be
33   reinitialized in case they are held during fork time to avoid
34   deadlocks.  The core Ruby Logger class needlessly uses a MonitorMutex
35   which can be disabled with a {monkey patch}[link:examples/logger_mp_safe.rb]
37 == Known Issues (Old)
39 * Under Ruby 1.9.1, methods like Array#shuffle and Array#sample will
40   segfault if called after forking.  Upgrade to Ruby 1.9.2 or call
41   "Kernel.rand" in your after_fork hook to reinitialize the random
42   number generator.
44   See http://redmine.ruby-lang.org/issues/show/2962 for more details
46 * Rails 2.3.2 bundles its own version of Rack.  This may cause subtle
47   bugs when simultaneously loaded with the system-wide Rack Rubygem
48   which Unicorn depends on.  Upgrading to Rails 2.3.4 (or later) is
49   strongly recommended for all Rails 2.3.x users for this (and security
50   reasons).  Rails 2.2.x series (or before) did not bundle Rack and are
51   should be unnaffected.  If there is any reason which forces your
52   application to use Rails 2.3.2 and you have no other choice, then
53   you may edit your Unicorn gemspec and remove the Rack dependency.
55   ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
56   Note: the workaround described in the article above only made
57   the issue more subtle and we didn't notice them immediately.
59 * WONTFIX: code reloading and restarts with Sinatra 0.3.x (and likely older
60   versions) apps is broken.  The workaround is to force production
61   mode to disable code reloading as well as disabling "run" in your
62   Sinatra application:
63     set :env, :production
64     set :run, false
65   Since this is no longer an issue with Sinatra 0.9.x apps, this will not be
66   fixed on our end.  Since Unicorn is itself the application launcher, the
67   at_exit handler used in old Sinatra always caused Mongrel to be launched
68   whenever a Unicorn worker was about to exit.
70   Also remember we're capable of replacing the running binary without dropping
71   any connections regardless of framework :)