4

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

意义:

  1. 如果不需要运行迁移,我想透明地升级代码并且在部署期间没有请求进入 404。
  2. 这很难我想要一些可以无缝升级数据库的过程,并且在此期间,当数据库更新完成时,只需阻止 Web 请求(将它们在管道中排队),允许内容通过。(我只需要它来处理短时间的迁移——比如 5-10 秒的迁移)。

您将如何实现这一目标?

4

2 回答 2

3

只升级代码

如果您只是升级应用程序代码,那么乘客应该允许您这样做而不会跳过一个节拍。但是,如果升级出错,它不会保护您,因为您应该考虑拥有两个或更多负载平衡的 Web 服务器,您可以单独循环升级。

升级数据库

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

如果您坚持在进行数据库升级时没有停机时间,您有几个选择:

  1. 您可以重构数据库,使旧模式保持有效。这意味着您可以让您的应用程序的两个版本在同一个数据库上运行,并随着时间的推移迁移到新架构。有很多“数据库重构”文章,其中大多数都提倡使用触发器/等......来达到预期的结果。我个人认为这是付出了很多努力而不是很多回报。

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

我希望这有帮助!

于 2010-01-21T15:02:06.877 回答
0

你应该看看Capistrano

于 2010-01-21T09:32:11.240 回答