代码之家  ›  专栏  ›  技术社区  ›  Eric Z Beard

有什么好的策略可以让部署的应用程序可以热修复?

  •  9
  • Eric Z Beard  · 技术社区  · 16 年前

    在理想的情况下,我们的开发过程将是完美的,从而产生定期发布的版本,这些版本经过了彻底的测试,因此永远不需要对正在运行的应用程序进行“热修复”。

    但是,不幸的是,我们生活在现实世界中,有时bug会从我们身边溜走,直到我们在下一个版本中忙于编写代码时才会露出丑陋的脑袋。这个错误需要修复 现在 现在 .

    你如何处理这种需要?它确实会与良好的设计实践背道而驰,比如将代码重构成漂亮的离散类库。

    在生产服务器上手工编辑标记和存储过程可能会导致灾难,但也可以避免灾难。

    对于应用程序设计和部署技术,有哪些好的策略可以在维护需求和良好的编码实践之间找到平衡?

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

    [尽管我们在发布之前做了很多测试,]我们做的是:

    我们的SVN如下所示:

    /repo/trunk/
    /repo/tags/1.1
    /repo/tags/1.2
    /repo/tags/1.3
    

    创建“标记”的原因包括,我们的应用程序在生产代码中的某些设置与“trunk”略有不同(例如,不会通过电子邮件发送错误,但会记录错误),因此创建标记并提交这些更改是有意义的。然后在生产集群上签出。

    修补程序 一个问题,我们先在tags/x中修复它,然后 svn update 从标签上看是好的。有时我们会进行阶段性处理,有些问题(如拼写等小的/琐碎的修复)会绕过阶段性处理。

    唯一要记住的是应用 tags/x trunk .

    如果您有多个服务器, Capistrano 非常有助于运行所有这些操作。

        2
  •  0
  •   Ben Hoffstein    16 年前

    一种策略是为不同的组件大量使用声明式外部配置文件。

    例如:

    通过这种方式,您通常可以将关键组件分离为独立的部分,在不重新编译的情况下热修复正在运行的应用程序,并无缝地使用源代码管理(特别是与存储过程相比,存储过程通常需要手动进行源代码管理)。

        3
  •  0
  •   Kalpesh Patel    16 年前

    我们将代码分为框架代码和业务定制。业务定制类是使用一个单独的类加载器加载的,我们有一个工具可以将更改提交给正在运行的生产实例。每当我们需要在任何类中进行更改时,我们都会更改它并将其提交给正在运行的实例。正在运行的实例将拒绝旧的类加载器,并使用新的类加载器重新加载类。这类似于EJB的Jboss热部署。