使用Rails和Passenger在生产服务器上升级ruby

时间:2015-03-16 18:04:35

标签: ruby-on-rails ruby deployment passenger

我有几个Rails应用程序,每个都在自己的服务器上运行。他们在Passenger-apache下运行,目前处于ruby 1.9.3之下。目前,他们在使用rbenv安装和管理的ruby下运行。

我想将它们全部升级到ruby 2.2.x.只要我这样做,我也希望将它们从乘客4.x升级到5.x。

让我们假设我已经在我的开发盒上对它们进行了全部测试,我相信它们在ruby 2.2下运行良好。

当我想到这一点时,我对最好的方法感到困惑 - 特别是在最短的生产停机时间。

我想我首先在rbenv下安装ruby 2.2,理论上它不应该干扰正在运行的应用程序。 Passenger安装在特定的ruby下,但随后可以选择在不同的rubies下运行应用程序。我应该先安装最新的乘客,在新的ruby 2.2下,但配置为运行旧ruby下的现有应用程序?然后将应用程序升级到新的ruby ...我想再次运行bundle install,以便在新的ruby下安装所有依赖项?

还是别的什么呢?有没有办法做到这一点相对安全,并且我的应用程序的停机时间有限或零?

以前有人这样做过吗?我已经非常熟悉所有的部分,并且可以自己集体讨论可能的方法,但是当我开始时,有太多的地方我不确定最好的方法是什么。我真正可以使用的是来自已经做过这件事的人的建议,或者非常确定他们推荐的内容会像他们所说的那样起作用 - 而不仅仅是对你可能做的事情的猜测。谢谢!

1 个答案:

答案 0 :(得分:0)

确保您的应用程序在新的ruby版本下运行。我有一些传统的Rails 3.2.x应用程序,可以使用ruby 2.1.5,但在ruby 2.2.x中有所不同。更新您的红宝石和乘客版本应该没问题。

由于每个应用程序都在自己的服务器上运行,因此您无需担心运行多个版本的passenger。您应该能够在每台服务器上安装新版本的ruby,安装gem,将apache更新到新的乘客并重新启动apache以使一切生效。最糟糕的情况是,您可以将服务器克隆到虚拟环境,并在生产之前测试所有内容。这将有助于您最大限度地减少停机时间,因为您可以在触摸生产环境之前进行任何变通办法和/或研究错误。