【发布时间】:2012-03-12 09:13:05
【问题描述】:
我正在运行独角兽并试图让零停机时间重新启动工作。
到目前为止,一切都很棒,主进程分叉并启动了 4 个新工作人员,然后杀死了旧工作人员,每个人都很高兴。
我们的脚本发送以下命令来重启独角兽:
kill -s USR2 `cat /www/app/shared/pids/unicorn.pid`
表面上看起来一切都很好,但事实证明 unicorn 并没有重新加载 production.rb。 (每次部署时,我们都会将 config.action_controller.asset_host 值更改为新的 CDN 容器端点,其中包含我们的预编译资产)。
以这种方式重新启动独角兽后,资产主机仍指向旧版本。进行真正的重启(即:停止主进程,然后从头开始重新启动 unicorn)获取新的配置更改。
preload_app 在我们的独角兽配置文件中设置为true。
有什么想法吗?
【问题讨论】:
-
你的 unicorn.rb 配置是否试图杀死 .oldbin 上的进程?查看解决方案:jessewolgamott.com/blog/2012/01/02/…
-
它肯定会杀死老主进程——一旦重启完成并且工作人员准备就绪,
ps -ef | grep unicorn只显示主进程和 4 个工作进程。 master 的 pid 与发出 USR2 之前的旧 master 的 pid 不同。
标签: ruby-on-rails ruby ruby-on-rails-3 deployment unicorn