title: Heroku zero-downtime deployment with Unicorn
body: <p>I was wondering if it's possible to have a zero-downtime deployment strategy with Heroku. I find with the current Heroku docs, that upon pushing an app, it takes about 1 minute to reload the app, which makes it unusable. The unicorn code in their documentation does preload the app, so I'm confused why this is happening. Is there anything I can do on my end?</p>
  
  <p><a href="https://devcenter.heroku.com/articles/rails-unicorn" rel="nofollow">https://devcenter.heroku.com/articles/rails-unicorn</a></p>
  
  <p>I have the new relic addon as well as bonsai for elastic search.</p>
  
  <p>Here is my unicorn.rb initializer:</p>
  
  <pre><code># config/unicorn.rb
  worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
  timeout 15
  preload_app true
  
  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 send QUIT'
   end
  
   defined?(ActiveRecord::Base) and
     ActiveRecord::Base.establish_connection
  end
  </code></pre>