我的独角兽故事:我部署,部署失败(堆栈或其他),响应部署完成,我不知道提供的代码是正确的代码,除非我查看日志。即使查看独角兽切换进程时我必须查看的日志。
我启动独角兽它启动 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)没有成为应用程序的新主人,有没有人遇到过如何与您的团队沟通?