在Rails中无缝部署

时间:2010-01-21 07:42:25

标签: ruby-on-rails passenger continuous-deployment

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

意义:

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

2 个答案:

答案 0 :(得分:3)

仅升级代码

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

升级数据库

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

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

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

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

  3. 我希望这有帮助!

答案 1 :(得分:0)

您应该查看Capistrano