我的 Unicorn 故事:我部署,部署失败(堆栈或其他),响应是部署完成,除非我查看日志,否则我不知道所提供的代码是正确的代码。即使查看 Unicorn 切换进程时我必须查看的日志。
我启动了一个 unicorn ,它启动了 pid=A pid=A fork 到 B,C,D,E
A是主人
当我用 USR2 给 A 发信号时
它再次 fork 自己 (F)
通常
- F 次执行
- F 现在是 master(但不控制套接字)
- F fork G、H、I、J(如果可以的话),然后通知 A 退出
- 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)他们需要以命令行响应的形式收到通知,这样他们就不必打开日志。
有没有人遇到过如果新的 Unicorn 进程 (F) 没有成为应用程序的新主人,如何与您的团队沟通?
最佳答案
考虑使用进程监控工具,例如 God , Bluepill , monit等。然后您可以通过这些工具在您的 capistrano 部署配方中发布 USR2。无论失败的原因(部署失败或其他原因)如何,这些都可以(以多种方式)通知流程失败。它们还可以配置为尝试自动重启失败的进程。
关于ruby-on-rails - 如果 Unicorn 启动新进程失败,Capistrano 能通知我吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746026/