Skip to content

Commit

Permalink
docs: hopefully clarify preload_app=false behavior
Browse files Browse the repository at this point in the history
While we're at it, inform people of why they might use
a symlink
  • Loading branch information
Eric Wong committed Jun 11, 2010
1 parent 14da5bd commit f9baab1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
7 changes: 6 additions & 1 deletion SIGNALS
Expand Up @@ -14,7 +14,12 @@ Unicorn and nginx.
will also pick up any application code changes when restarted. If
"preload_app" is true, then application code changes will have no
effect; USR2 + QUIT (see below) must be used to load newer code in
this case.
this case. When reloading the application, +Gem.refresh+ will
be called so updated code for your application can pick up newly
installed RubyGems. It is not recommended that you uninstall
libraries your application depends on while Unicorn is running,
as respawned workers may enter a spawn loop when they fail to
load an uninstalled dependency.

* INT/TERM - quick shutdown, kills all workers immediately

Expand Down
21 changes: 18 additions & 3 deletions lib/unicorn/configurator.rb
Expand Up @@ -311,7 +311,22 @@ def pid(path); set_path(:pid, path); end
#
# In addition to reloading the unicorn-specific config settings,
# SIGHUP will reload application code in the working
# directory/symlink when workers are gracefully restarted.
# directory/symlink when workers are gracefully restarted when
# preload_app=false (the default). As reloading the application
# sometimes requires RubyGems updates, +Gem.refresh+ is always
# called before the application is loaded (for RubyGems users).
#
# During deployments, care should _always_ be taken to ensure your
# applications are properly deployed and running. Using
# preload_app=false (the default) means you _must_ check if
# your application is responding properly after a deployment.
# Improperly deployed applications can go into a spawn loop
# if the application fails to load. While your children are
# in a spawn loop, it is is possible to fix an application
# by properly deploying all required code and dependencies.
# Using preload_app=true means any application load error will
# cause the master process to exit with an error.

def preload_app(bool)
case bool
when TrueClass, FalseClass
Expand Down Expand Up @@ -344,9 +359,9 @@ def stdout_path(path)
set_path(:stdout_path, path)
end

# sets the working directory for Unicorn. This ensures USR2 will
# sets the working directory for Unicorn. This ensures SIGUSR2 will
# start a new instance of Unicorn in this directory. This may be
# a symlink.
# a symlink, a common scenario for Capistrano users.
def working_directory(path)
# just let chdir raise errors
path = File.expand_path(path)
Expand Down

0 comments on commit f9baab1

Please sign in to comment.