4

我的独角兽故事:我部署,部署失败(堆栈或其他),响应部署完成,我不知道提供的代码是正确的代码,除非我查看日志。即使查看独角兽切换进程时我必须查看的日志。

我启动独角兽它启动 pid=A pid=A 分叉到 B,C,D,E

A是主人

当我用 USR2 向 A 发送信号时

它再次分叉自己 (F)

一般

  • F 重新执行人员
  • F 现在是主控(但不能控制套接字)
  • F 分叉 G、H、I、J(如果可以的话),然后向 A 发出 QUIT 信号
  • A 捕获 QUIT,清理自己,并将套接字交给 F
  • F 运行新代码,直到我们重新部署

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

  • F重新执行,
  • F失败,然后回到A

部署失败,新代码在运行旧进程的服务器上。这意味着网站没有改变。Capistrano 给我一个“一切都好”的标志。

我可以在日志中看到部署失败#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)他们需要得到通知作为命令行响应,因此他们不必打开日志。

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

4

1 回答 1

0

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

于 2013-09-12T18:16:40.847 回答