代码之家  ›  专栏  ›  技术社区  ›  Sam Saffron James Allen

Rails中的无缝部署

  •  4
  • Sam Saffron James Allen  · 技术社区  · 16 年前

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

    意思是:

    1. 如果不需要运行迁移,我希望透明地升级代码,并且在部署过程中没有go 404请求。
    2. 这很难 我希望有一些可以无缝升级数据库的过程,在这段时间内,只需保留web请求(在管道中排队),当数据库更新完成时,允许内容通过。(我只需要在短时间迁移时使用它,比如5-10秒的迁移)。

    你将如何实现这一目标?

    2 回复  |  直到 16 年前
        1
  •  3
  •   jonnii    16 年前

    只升级代码

    如果你只是升级应用程序代码,乘客应该允许你做到这一点,而不跳过节拍。但是,如果升级失败,它不会保护你,因为你应该考虑有两个或多个负载均衡的Web服务器,你可以单独升级循环。

    升级数据库

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

    如果你坚持在升级数据库时不停机,你有几个选择:

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

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

    我希望这有帮助!

        2
  •  0
  •   Simone Carletti    16 年前

    你应该看看 Capistrano .

    推荐文章