ruby-on-rails - 如果 Unicorn 启动新进程失败,Capistrano 能通知我吗

标签 ruby-on-rails ruby capistrano unicorn

我的 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/

相关文章:

javascript - InfoVis 和 Rails

ruby-on-rails - 设计自定义登录表单

MySQL 和 MySQL2 gem 在主机上构建,但不通过 Capistrano 或 SSH 构建

ruby - 无方法错误 : undefined method `start_with?'

ruby-on-rails - 是否有 Rails gem 可以将推文从 Twitter 提取到我可以迭代的对象中?

ruby-on-rails - Postgresql 存储过程还是 Rails 类?

ruby - 如何在考虑每个值唯一的情况下基于数组哈希过滤数组?

ruby-on-rails - 为什么 Capistrano 部署在 Assets :precompile without error? 处失败

css - 在 Rails 中根据屏幕大小和浏览器窗口大小更改网站布局

ruby - 为什么 ruby​​ 的 JSON 解析器会吃掉我的反斜杠?