你能否像在Unicorn上重新加载应用程序一样,在Passenger上无缝重新加载Rails应用程序?

4
使用Unicorn,您可以使用命令kill -USR2 [主进程]重新启动和重新加载Rails应用程序。该命令不会立即杀死进程,而是在后台启动新的主进程+从进程。当新主进程准备就绪时,您可以使用kill -QUIT关闭旧主进程。这使您可以重启网站而不会让任何访问者注意到请求处理的减速。
然而,使用Passenger,您需要使用命令touch tmp/restart.txt来重新启动Rails应用程序。据我所知,这将导致Rails应用程序变得无响应,并需要几秒钟才能重新启动。
是否有一种方法可以使用Passenger,但同时也能够使Rails应用程序无缝重启?

这可能会有所帮助 http://serverfault.com/questions/263566/how-to-achieve-zero-downtime-with-passenger-3 - Peter Brown
2个回答

2

滚动重启功能仅适用于Phusion Passenger Enterprise

这就是klochner所提到的“授权版本”,但直到8月份才发布。Phusion Passenger Enterprise可完全自动化滚动重启(Unicorn需要一些手动脚本来使滚动重启有很好的表现)。它还包括一堆其他有用的功能,如部署错误抵抗力、实时IRB控制台等。


1
恭喜发布成功,实时irb控制台看起来很酷。 - klochner

1

不,现在是可以的 - 请看hongli的回复

您正在请求滚动重启,即在关闭旧进程之前启动新服务器进程。Passenger(免费版本)不会丢弃请求,但每次部署时都会将其排队和延迟。

据说滚动重启已经在授权版本中实现,并可用,但尚未发布免费版本。我无法弄清如何获取授权版本。

请关注此Google群组主题以获取更多信息:

https://groups.google.com/forum/#!msg/phusion-passenger/hNvU-ZE7_WY/gOF9XWmhHy0J

你可以尝试运行两个独立的Passenger进程,并手动关闭一个,而另一个保持运行,但我不认为这是你要寻找的答案。

谢谢你的回答。现在我知道要使用“滚动重启”这个术语了。 - dan
没问题 - 从谷歌帖子中可以看出,我对推迟发布这个功能有点失望。 - klochner
这是因为你提到的“授权版本”直到八月份才发布。我在这个话题中的帖子会更详细地说明这个问题。 - Hongli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接