【发布时间】:2012-02-07 01:21:50
【问题描述】:
所以我有几台机器正在生产中,它们在 Rack 上运行 Sinatra 应用程序。通常一切都是笨拙的,直到 Puppet - 我们用来同步更改到我们的服务器 - 注意到项目的 Gemfile.lock 已更改,因此需要发出 bundle install --binstubs --deployment 命令以便我们得到新的宝石。发生这种情况时,任何 http 请求在调用 Bundler 以要求我们的 gem 时都会导致 500 错误,因为尚未安装新的 gem。
我们通常至少有一个 Rack 进程挂起,因为另一个进程会定期发出 http 请求以确保服务器处于活动状态,但是当这种情况发生时,没有 Rack 进程处于活动状态。如果问题出在新实例上,似乎PassengerMinInstances 指令可能会有所帮助,但我们还有一个进程会定期获取页面以测试服务器是否仍在运行,因此仍然应该至少有一个 Rack 进程活着处理请求。
我可能应该注意到,直到bundle install 完成之后,puppet 才真正重新启动 Rack(通过 touching restart.txt 文件),所以我们的 Rack 进程为什么会运行没有任何意义此时离开。有没有人遇到过这样的事情?是否有一些 Rack 选项可以在我忽略的每个请求上不重新加载整个环境?
【问题讨论】:
标签: sinatra bundler rack passenger puppet