我决定最终确定我的团队的部署流程,从头到尾。我们剩下的最后一个痛点是管理数据库和运行时数据迁移/管理。这里有两个例子,虽然有很多:
- 如果发布新的“上传”功能,自动创建上传目录并配置权限。在以后的版本中,验证存在/权限 - 永远,自动。
- 如果数据库中的某个值(假设“注册”的帐户状态)不再有效,则在给定一些业务规则的情况下,自动将数据库中的数据迁移到适当的值。
我有兴趣实现一个允许开发人员管理和部署这些更改的框架,就像我们管理和部署代码一样容易。
所以第一个问题是:1. 有哪些工具/框架可以提供这种能力?
一般来说,这似乎是任何给定语言和平台的问题。在我的具体情况下,我正在部署一个使用 Fluent NHibernate 进行数据库抽象的 .NET MVC2 应用程序。在我的部署过程中,我已经有了一个触发 NHibernate 的 SchemaUpdate 的工具——这太棒了。
我为以自己的方式解决此问题而建立的工具是一种工具,该工具将扫描目标程序集以查找从某个抽象类(部署)继承的类。该抽象类公开了挂钩,您可以在应用程序代码库的上下文中覆盖和实现您自己的任意部署代码。Deployment 类还提供了版本控制机制,并且该工具管理给定正在运行的应用程序的当前“部署版本”。然后,自定义 NAnt 任务将其与 NAnt 部署脚本粘合在一起,在适当的时间触发挂钩。
这似乎运作良好,并且确实达到了我的目标 - 但这是我的牛肉,并引出了我的第二个问题:2. 当然,我刚刚写的内容必须已经存在。如果是这样,你能指点我吗?3. 有没有人开始走这条路并深入了解这种方法的问题?
最后,如果存在类似的东西,但不在 .NET 平台上,请告诉我 - 因为我对移植已知解决方案比在我自己的解决方案上从零开始更感兴趣。
谢谢大家,非常感谢您的反馈!