【发布时间】: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