【问题标题】:Running Scripts One Time When Deployed部署时一次性运行脚本
【发布时间】:2011-07-12 15:31:56
【问题描述】:

我们目前正在使用 Phing 进行部署,并使用 dbdeploy 应用任何数据库更改。但是,有时我们希望在部署期间进行一些更改,这些更改可以更好地由我们的对象模型处理,因此我们编写了一次使用 PHP 脚本,在部署后手动运行。

是否有任何类似于 dbdeploy 的现有解决方案可以处理正在运行的脚本,更重要的是,跟踪哪些已经运行,以便每个脚本只运行一次?

【问题讨论】:

    标签: php deployment phing


    【解决方案1】:

    我认为这对其他人也可能有用。如果您想不出其他解决方案,我认为最好的解决方案是查看实现DBDeploy task 的文件,将其复制到自定义任务中,重用数据库检查功能,而不是生成 SQL 脚本执行您需要的脚本。

    如果您对它感到满意,您也可以考虑将其贡献给 Phing。我相信他们会很乐意将其包含在内(请参阅Phing-How To Contribute)。

    【讨论】:

    • 这很有趣。出于某种原因,我假设大部分功能是由 dbdeploy 自己处理的,但看起来“更改日志”概念的很大一部分是内置到 Phing 任务中的。如果不存在其他任何东西,这将为我们提供一个开始“推出自己的”解决方案的好地方。
    • 是的,这可能有点令人困惑,但 PHP 的 DBDeploy 实际上纯粹是在 PHP 中作为 Phing 任务实现的 DBDeploy 的“想法”。该脚本实际上非常简单,因此根据您的需要对其进行修改应该非常容易。祝你好运!
    【解决方案2】:

    怎么样:

    1. 将脚本放入文件夹中。
    2. 遍历文件夹并执行脚本。
    3. 执行后删除/移动脚本文件。

    听起来像个 hack,但 imo 很简单。

    【讨论】:

    • dbdeploy 运行方式的优点之一是它可以永久存储更改和已运行的跟踪。这样,它们就存在于版本控制中,供所有开发人员在他们的开发环境中运行。例如,我可以从一个新数据库开始,运行 dbdeploy 并保持最新状态。我可以多次这样做。
    【解决方案3】:

    我能想象到的最简单的方法可能是使用 Phing ExecTask,另请参阅 Phing User Guide (stable)

    【讨论】:

    • 在这种情况下 ExecTask 将如何提供帮助?该问题的作者要求提供跟踪哪些脚本已运行的解决方案,以便它不会再次运行。使用 ExecTask 无法实现这一点。所以我只是想知道......
    • 正如链接手册所建议的那样,这只是一个开始。更好的是随着时间的推移从中创建一个 Phing 任务。实际上,OP 要求每次部署执行一次脚本,所以最初的问题不是那么精确,也不是我如何理解部署一次必须是特定部署一次(特定系统?)对于同一版本?在多个系统上? ...
    最近更新 更多