【问题标题】:Fluent Migrations in Product Installer for Multiple Platforms多平台产品安装程序中的流利迁移
【发布时间】:2012-08-21 10:16:05
【问题描述】:

我们为外部付费客户开发产品(即我们不是只为我们控制范围内的环境生产产品的内部 IT 部门),我们目前必须同时支持 SQL Server 2005+ 和 Oracle 10.2+ 作为后端。我们使用 TeamCity 和 Wix 进行 CI 和构建,这些构建进入我们的测试团队,显然,在测试结束时最终交付给我们的客户。目前我们有无数的 SQL 脚本来升级数据库。在最基本的形式中,可能有一个 DDL 脚本和一个数据脚本(每个版本、每个平台),但也可能有包含存储过程的脚本,甚至是客户端特定的脚本。根据客户端升级的版本数量(例如 2.0 到 2.7),他们可能必须以正确的顺序运行多达两打脚本。

显然,人为错误的可能性很大,目前无法降级,这要归功于脚本的自动版本编号存在缺陷(以及数据库记录已运行脚本的相当笨拙的方式) ,并不总是清楚在数据库上运行了什么。显然这不是一个很好的情况。

我正在研究 Fluent Migrator 或类似工具的使用 - 不一定是 Fluent - 尝试为整个过程带来更多的顺序和版本控制,但是虽然有很多文章和示例如何将它与 CI 一起使用我找不到关于将迁移集成到 MSI 安装程序或类似设备中的信息。

我想做的是将它作为我们整体安装程序的一部分,或者专门为升级/降级数据库制作一个。暂时不考虑任何客户端特定的迁移,甚至可以从这样的安装程序执行通用迁移吗?如果是这样,如何在单个安装程序中针对多个平台(即同时提供 SQL 和 Oracle 迁移并在运行时确定使用哪个平台)?

我的计划是将迁移保留在单个程序集中(类似于 this article 中的描述),并让安装程序根据创建安装程序时提供的信息执行适当的向上/向下迁移。假设可以做到,这听起来像是一个明智的解决方案,还是有更好的方法来管理我不知道的所有这些?

非常感谢

史蒂夫

【问题讨论】:

    标签: installation wix database-migration fluent-migrator


    【解决方案1】:

    是的,绝对有可能。

    要从您自己的代码运行 FluentMigrator,您只需创建一个 RunnerContext 并执行它。有关示例,请参见 NAnt runner(或 Console runner)。

    针对不同平台,可以在执行RunnerContext时通过Database参数传入数据库类型来控制。其他选项是传入 ApplicationContext 以在迁移中使用。或者通过使用可以在迁移上设置的Tags 过滤。

    【讨论】:

    • 谢谢!!这看起来完全像我所追求的。我在想我可以从自定义任务执行迁移,或者可能在安装后从我们的实用程序应用程序执行迁移,但对我来说最重要的功能是标签。看起来它会随着时间的推移为我解决很多问题。好好阅读这些页面,然后开始计划一个概念验证原型,向我的老板展示我们可以将它用于 SQL 和 Oracle。以后也可以在博客上分享这些信息,因为我发现很难绕过基本的 CI 使用。
    • 听起来不错。请随意更新 wiki,并提供如何执行此操作的示例!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2018-05-18
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多