如果Unicorn无法启动新流程,Capistrano可以通知我

时间:2013-05-25 03:13:42

标签: ruby-on-rails ruby capistrano unicorn

我的独角兽故事:我部署,部署失败(堆栈或其他),响应是部署完成,我不知道所提供的代码是正确的代码,除非我查看日志。即使查看日志,我必须在Unicorn交换机处理时观察。

我启动了一个Unicorn,它启动了pid = A. pid = A分叉到B,C,D,E

A是主人

当我用USR2发信号A时

它更多地(f)

NORMALLY

  • F re-execs
  • F现在是主人(但不控制插座)
  • F分叉G,H,I,J(如果可以),然后将A发送到QUIT
  • A陷阱退出,清理自己,并将插座交给F
  • F运行新代码,直到我们重新部署

但是......如果代码部署了堆栈 - 应用程序无法启动

  • F re-execs,
  • F失败,然后回到A

部署失败,新代码在旧服务器运行的服务器上。这意味着该网站没有改变。卡皮斯特拉诺给了我'好的'标志。

我可以看到日志中的部署失败     #app / shared / log / unicorn.rc.log

forked child re-executing...
I, [2013-05-24T22:35:16.986618 #88700]  INFO -- : inherited addr=0.0.0.0:51020 fd=10
I, [2013-05-24T22:35:16.987264 #88700]  INFO -- : Refreshing Gem list
/u/app/releases/20130524223245/app/controllers/application_controller.rb:2: "This  application is deployed correctly" (RuntimeError)

我正在尝试在我的部署脚本或我的日志中获得一个解决方案,它告诉我的开发人员在Unicorn回滚到旧进程时部署失败(即......没有开始运行F)他们需要作为命令行响应通知,因此他们不必打开日志。

如果新的Unicorn流程(F)没有成为应用程序的新主人,有没有人遇到过如何与您的团队沟通?

1 个答案:

答案 0 :(得分:0)

考虑使用流程监控工具,例如GodBluepillmonit等。然后,您可以在capistrano部署配方中通过这些工具发布USR2。无论故障原因(部署失败或其他原因),这些都可以(以多种方式)通知过程故障。它们还可以配置为尝试自动重新启动失败的进程。