【问题标题】:Heroku zero-downtime deployment with Unicorn使用 Unicorn 的 Heroku 零停机部署
【发布时间】:2013-04-19 19:07:26
【问题描述】:

我想知道 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

【问题讨论】:

标签: heroku unicorn


【解决方案1】:

2014 年 11 月 14 日更新:

Preboot 现在普遍可用(感谢@camJackson 的改进)。

更新日志条目:

新的(ish)开发中心文章:


原始回复

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

预启动是一项正在进行的工作

请注意,使用 Unicorn 在这里没有任何影响。该上下文中的预加载是主进程在分叉工人之前预加载 Rails 应用程序;这发生在新的测功机旋转并循环出去之后。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多