【问题标题】:Web Application deployment and database/runtime data managementWeb 应用程序部署和数据库/运行时数据管理
【发布时间】:2011-03-03 15:13:14
【问题描述】:

我已决定最终确定我团队的部署流程,从头到尾。我们剩下的最后一个痛点是管理数据库和运行时数据迁移/管理。这里有两个例子,虽然有很多:

  • 如果发布新的“上传”功能,自动创建上传目录并配置权限。在以后的版本中,验证存在/权限 - 永远自动。
  • 如果数据库中的某个值(假设“注册”的帐户状态)不再有效,则根据某些业务规则自动将数据库中的数据迁移到适当的值。

我有兴趣实现一个框架,让开发人员能够像管理和部署代码一样轻松地管理和部署这些更改。

所以第一个问题是:1。有哪些工具/框架可以提供这种能力?

一般来说,这似乎是任何给定语言和平台的问题。在我的具体情况下,我正在部署一个使用 Fluent NHibernate 进行数据库抽象的 .NET MVC2 应用程序。在我的部署过程中,我已经有了一个触发 NHibernate 的 SchemaUpdate 的工具——这太棒了。

我以自己的方式解决这个问题,构建了一个工具,它可以扫描目标程序集以查找从某个抽象类(部署)继承的类。该抽象类公开了挂钩,您可以在应用程序代码库的上下文中覆盖和实现您自己的任意部署代码。 Deployment 类还提供了版本控制机制,该工具管理给定正在运行的应用程序的当前“部署版本”。然后,自定义 NAnt 任务将其与 NAnt 部署脚本粘合在一起,在适当的时间触发挂钩。

这似乎运作良好,并且确实达到了我的目标 - 但这是我的牛肉,并引出了我的第二个问题:2。我刚才写的肯定已经存在了。如果是这样,你能指点我吗?3。有没有人开始走这条路并深入了解这种方法的问题?

最后,如果存在类似的东西,但不在 .NET 平台上,请告诉我 - 因为我对移植已知解决方案比在我自己的解决方案上从零开始更感兴趣。

谢谢大家,非常感谢您的反馈!

【问题讨论】:

    标签: deployment data-migration production-environment web-deployment


    【解决方案1】:

    每个主要版本都有一个脚本来创建具有您需要的确切要求的环境。

    对于次要版本,有一个脚本,该脚本被分成不同的版本并逐步改变环境。这有一些很大的好处

    1. 您可以通过阅读脚本并将其与发行说明和更改日志进行匹配来查看环境随时间的变化。
    2. 您可以通过运行最新的主要脚本和最新的次要脚本来创建全新的环境。
    3. 您可以创建旧版本的全新环境(可能出于测试目的),方法是将其指定为在某个次要版本处停止。

    【讨论】:

    • 我过去采用过这种方法,虽然它非常适合修改文件系统和环境设置等事情,但它不允许您在应用程序的域中进行更改。它让开发人员创建一次性的控制台应用程序来进行这些类型的更改(如第二个要点),根据我的经验,这会导致混乱和草率 - 因为这样“手动完成”变得更容易。
    • 你是说它不能做数据库操作吗?而且您不需要应用程序 - 一个脚本来进行数据操作就可以了。它可能看起来像一个“一次性”脚本,但如果你仔细想想,你只需要从状态 A 转到状态 B 一次,除非你正在创建一个新环境,在这种情况下,脚本会尘埃落定离开它,它就走了。
    • 当然,这种方法可以运行静态 SQL 脚本,但仅此而已。例如,我最近修改了用户帐户以使用散列密码(继承代码,否则它们从第一天起就已经被散列)。这种类型的更新需要处理,更一般地说,它必须应用业务规则 - 而不仅仅是静态脚本。我非常感谢你的建议,过去它对我很有帮助。我现在只是在寻找更多的东西。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 2016-02-12
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2014-07-29
    相关资源
    最近更新 更多