# unicorn_rails -c ./config/unicorn/production.rb -E production -D APP_DIR = "/srv/www/componentowl.com/current" worker_processes 2 # Help ensure your application will always spawn in the symlinked # "current" directory that Capistrano sets up. working_directory APP_DIR # This loads the application in the master process before forking # worker processes # Read more about it here: # http://unicorn.bogomips.org/Unicorn/Configurator.html preload_app true # This is where we specify the socket. # We will point the upstream Nginx module to this socket later on listen "/tmp/componentowl.sock", :backlog => 64 # Optionally listen to a tcp port. #listen 5000, :tcp_nopush => true pid "/tmp/componentowl.com.pid" # Temp fix for the setup file uploading (should be handled # by node.js in future). timeout 5 * 60 # By default, the Unicorn logger will write to stderr. # Additionally, ome applications/frameworks log to stderr or stdout, # so prevent them from going to /dev/null when daemonized here: stderr_path "#{APP_DIR}/log/unicorn.stderr.log" stdout_path "#{APP_DIR}/log/unicorn.stdout.log" before_fork do |server, worker| # This option works in together with preload_app true setting # What is does is prevent the master process from holding # the database connection defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! # When sent a USR2, Unicorn will suffix its pidfile with .oldbin and # immediately start loading up a new version of itself (loaded with a new # version of our app). When this new Unicorn is completely loaded # it will begin spawning workers. The first worker spawned will check to # see if an .oldbin pidfile exists. If so, this means we've just booted up # a new Unicorn and need to tell the old one that it can now die. To do so # we send it a QUIT. # # Using this method we get 0 downtime deploys. old_pid = "/tmp/componentowl.com.pid.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # someone else did our job for us end end end after_fork do |server, worker| # Here we are establishing the connection after forking worker # processes defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end