From 8f682a6d07e70fd97bce671659dedb9475f13386 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Fri, 19 Apr 2013 09:52:16 +1000 Subject: [PATCH] Unicorn handle forked db connections - fixes PG::Error SSL SYSCALL error: EOF detected --- config/unicorn.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/config/unicorn.rb b/config/unicorn.rb index b1ba7bad1d..832f09d0a1 100644 --- a/config/unicorn.rb +++ b/config/unicorn.rb @@ -1,3 +1,27 @@ preload_app true # https://newrelic.com/docs/ruby/no-data-with-unicorn worker_processes 4 # amount of unicorn workers to spin up timeout 30 # restarts workers that hang for 30 seconds + + +# https://devcenter.heroku.com/articles/forked-pg-connections +before_fork do |server, worker| + + Signal.trap 'TERM' do + puts 'Unicorn master intercepting TERM and sending myself QUIT instead' + Process.kill 'QUIT', Process.pid + end + + defined?(ActiveRecord::Base) and + ActiveRecord::Base.connection.disconnect! +end + +after_fork do |server, worker| + + Signal.trap 'TERM' do + puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT' + end + + defined?(ActiveRecord::Base) and + ActiveRecord::Base.establish_connection + +end