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