使用Unicorn进行Heroku零停机部署

时间:2013-04-19 19:07:27

标签: heroku unicorn

我想知道是否可以使用Heroku实现零停机部署策略。我发现目前的Heroku文档,在推送应用程序时,重新加载应用程序大约需要1分钟,这使得它无法使用。他们文档中的独角兽代码会预加载应用程序,所以我很困惑为什么会发生这种情况。我能做些什么吗?

https://devcenter.heroku.com/articles/rails-unicorn

我有新的遗物插件以及用于弹性搜索的盆景。

这是我的unicorn.rb初始化程序:

# 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

1 个答案:

答案 0 :(得分:5)

更新2014-11-14:

现在普遍可以使用预启动(感谢@camJackson的爆破)。

更改日志条目:

新(ish)开发中心文章:


原始回复

目前唯一的方法是使用预启动实验室功能:

预启动是正在进行的工作

请注意,使用Unicorn对此没有任何影响。该上下文中的预加载是在分配工作人员之前预加载Rails应用程序的主进程;这是在新的dynos旋转并循环后发生的。