所以我必须在生产几台机器正在运行在机架顶部的西纳特拉应用。通常情况下,所有的事情都是蠢蠢欲动的,直到Puppet - 我们用来将更改同步到我们的服务器 - 注意到项目的Gemfile.lock已更改,因此需要发出命令bundle install --binstubs --deployment
,以便我们获得新的宝石。发生这种情况时,任何http请求在调用Bundler来请求我们的宝石时都会导致500错误,因为新的宝石尚未安装。架:在`束捆扎机:: GemNotFound错误安装--deployment`
我们通常至少有一个机架过程游逛由于另一个进程定期发出HTTP请求,以确保服务器是活的,但是当这种情况发生,没有货架的过程活着。如果问题出现在新实例中,PassengerMinInstances
指令可能会有所帮助,但我们也有一个定期提取页面以测试服务器仍然运行的进程,所以至少应该有一个Rack进程处于活动状态以处理请求。
我应该注意到,在bundle install
完成之后,木偶并没有真正重新启动Rack(通过touch
重新启动restart.txt文件),因此我们的Rack进程在此时会消失时间。有没有人遇到过这样的事情?是否有一些Rack选项不能在我忽略的每个请求中重新加载整个环境?
有趣。如果您不介意对每个应用程序进行全面检出(可能还有相关的宝石),那么这不是一个糟糕的解决方案。如果你经常部署,那么这是一个很大的带宽。 – tjarratt 2012-02-07 03:24:27