3 Occasionally odd {issues}[link:ISSUES.html] arise without a transparent or
4 acceptable solution. Those issues are documented here.
6 * For notes on sandboxing tools such as Bundler or Isolate,
7 see the {Sandbox}[link:Sandbox.html] page.
9 * Under Ruby 1.9.1, methods like Array#shuffle and Array#sample will
10 segfault if called after forking. This is fixed in trunk (r26936) and
11 should be backported to the next 1.9.1 stable release (after p378).
12 Until then, it is advisable to call "Kernel.rand" in your after_fork
13 hook to reinitialize the random number generator.
15 See http://redmine.ruby-lang.org/issues/show/2962 for more details
17 * When using "preload_app true", with apps using background threads
18 need to restart them in the after_fork hook because threads are never
19 shared with child processes. Additionally, any synchronization
20 primitives (Mutexes, Monitors, ConditionVariables) should be
21 reinitialized in case they are held during fork time to avoid
22 deadlocks. The core Ruby Logger class needlessly uses a MonitorMutex
23 which can be disabled with a {monkey patch}[link:examples/logger_mp_safe.rb]
25 * Rails 2.3.2 bundles its own version of Rack. This may cause subtle
26 bugs when simultaneously loaded with the system-wide Rack Rubygem
27 which Unicorn depends on. Upgrading to Rails 2.3.4 (or later) is
28 strongly recommended for all Rails 2.3.x users for this (and security
29 reasons). Rails 2.2.x series (or before) did not bundle Rack and are
30 should be unnaffected. If there is any reason which forces your
31 application to use Rails 2.3.2 and you have no other choice, then
32 you may edit your Unicorn gemspec and remove the Rack dependency.
34 ref: http://mid.gmane.org/20091014221552.GA30624@dcvr.yhbt.net
35 Note: the workaround described in the article above only made
36 the issue more subtle and we didn't notice them immediately.
38 * WONTFIX: code reloading and restarts with Sinatra 0.3.x (and likely older
39 versions) apps is broken. The workaround is to force production
40 mode to disable code reloading as well as disabling "run" in your
44 Since this is no longer an issue with Sinatra 0.9.x apps, this will not be
45 fixed on our end. Since Unicorn is itself the application launcher, the
46 at_exit handler used in old Sinatra always caused Mongrel to be launched
47 whenever a Unicorn worker was about to exit.
49 Also remember we're capable of replacing the running binary without dropping
50 any connections regardless of framework :)