【问题标题】:Avoiding deployment gem-fail downtime while using Passenger, bundler & git-based deploys在使用乘客、捆绑器和基于 git 的部署时避免部署 gem-fail 停机
【发布时间】:2011-08-07 00:13:28
【问题描述】:

我正在使用 capistrano 和基于 git 的部署在 Passenger 3.0.7 上部署 Rails 3 应用程序,类似于 GitHub 的设置: https://github.com/blog/470-deployment-script-spring-cleaning -- 这意味着应用程序完全在一个目录之外运行,没有 /releases/123456 和符号链接切换。

如果我们添加了任何 gem,我们的应用在部署期间开始抛出 500 错误,在“bundle:install”阶段,但在部署之前:重新启动。代码已经更新,好像乘客已经开始使用它了,但还没有找到所需的宝石。

这不是由新工作人员启动引起的,因为我尝试将Passenger idle_time 设置为0,并将max_instances 和min_instances 设置为相同的值,这样工作人员就不会停止工作。

使用 ruby​​-ee 1.8.7-2011.03 在 Linux 上运行。乘客错误示例:https://gist.github.com/54794e85d2c799e4f697

我还考虑过将“双目录”基于 git 的部署作为一种技巧——一旦捆绑完成就换入新代码。欢迎提出想法。

【问题讨论】:

  • 我敢打赌,除了你提到的两目录设置之外,没有任何像样的解决方案;不管你告诉Passenger什么,当一个新的worker启动时,都会从你的文件系统中读取代码。如果首先更新 Gemfile 不会导致此问题,您可能会试一试,但我猜它会同样失败。
  • 奇怪的是,这与启动新员工无关——它也会影响现有员工

标签: ruby-on-rails deployment passenger capistrano bundler


【解决方案1】:

使用双目录部署。除了在部署期间避免 500 之外,如果您在部署期间/之后需要回滚,这也可以作为安全网。

【讨论】:

  • 我可以使用基于 git 的部署很好地回滚,并且它们比一直复制目录要快得多......但是捆绑时的错误要严重得多:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多