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?
https://devcenter.heroku.com/articles/rails-unicorn
I have the new relic addon as well as bonsai for elastic search.
Here is my unicorn.rb initializer:
# 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