允许部署的应用程序可修复的一些好策略是什么?

时间:2008-09-27 15:27:48

标签: language-agnostic deployment maintenance

在一个理想的世界中,我们的开发过程将是完美的,导致定期发布经过如此彻底的测试,以至于无需“修补”正在运行的应用程序。

但是,不幸的是,我们生活在现实世界中,有时虫子从我们身边溜过来,并且在我们已经忙于编写下一个版本之前,不要将它们放在丑陋的头上。并且需要修复错误 现在 。不作为下一个计划发布的一部分。当交通消失时,今晚不是。的 现在

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

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

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

3 个答案:

答案 0 :(得分:2)

[即使我们在发布之前进行了很多测试,]我们做的是:

我们的SVN看起来像这样:

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

现在每当我们发布时,我们都会创建一个我们最终在生产中检查的标签。在我们进行生产之前,我们进行的分段是[较少的服务器,但与生产几乎相同。

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

现在每当我们需要修补程序一个问题时,我们首先在tags / x中修复它,然后从标记中修改svn update并且很好。有时候我们会通过分期来解决一些问题(例如像拼写这样的小问题或简单修复)我们绕过分段。

唯一要记住的是将tags/x的所有补丁应用到trunk

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

答案 1 :(得分:0)

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

示例:

通过这种方式,您通常可以将关键组件分成不连续的部分,修复正在运行的应用程序而无需重新编译,并无缝地使用源代码控制(特别是与存储过程相比,通常需要手动控制源代码)。 p>

答案 2 :(得分:0)

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