在Rails中无缝部署

我想无缝升级我的Rails应用程序:

含义:

  1. 如果不需要运行迁移,我希望透明地升级代码,并且在部署期间没有请求404。
  2. 这很难我想要一些可以无缝升级数据库的进程,并且在此期间只需要在db更新完成后暂停Web请求(在管道中排队),允许通过。 (我只需要这个就可以进行短暂的迁移 – 比如5-10秒的迁移)。

你会如何实现这一目标?

只升级代码

如果您只是升级应用程序代码,乘客应该允许您在不跳过节拍的情况下执行此操作。 但是,如果升级出错,它不会保护您,因为您应该考虑使用两个或更多负载平衡的Web服务器,您可以单独循环升级。

升级数据库

作为一个用户,我宁愿看到一个“向下维护”页面,而不是我的浏览器旋转10秒钟。 如果您解释停机时间​​是几秒钟的顺序并将页面设置为自动刷新。

如果您坚持在进行数据库升级时没有停机时间,您可以选择以下几种方法:

  1. 您可以以保持旧架构有效的方式重构数据库。 这意味着您可以保持两个版本的应用程序针对同一个数据库运行,并随着时间的推移迁移到新架构。 有很多“数据库重构”文章,其中大多数都主张使用触发器/等等来实现所需的结果。 我个人认为没有很多奖励需要付出很多努力。

  2. 根据您的应用程序,您可能会严重偏向于读取写入,这意味着您可以在升级数据库时显示未缓存数据的“维护”页面(这是facebook进行数据库升级的方式)。 如果您的大量数据存储在memcached或redis中,则更有效。 或者,您可以切换到只读数据库从站并禁用任何写入操作。

我希望这有帮助!

你应该看看Capistrano 。