2011-07-12 77 views
4

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

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

回答

1

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

如果您对此感到满意,您可能还会考虑将其贡献给Phing。我相信他们会很乐意包括它(见Phing-How To Contribute)。

+0

这很有趣。出于某种原因,我认为大部分功能都是由dbdeploy自己处理的,但它看起来像是将“changelog”概念的一大部分内置到了Phing任务中。如果没有其他的东西存在,这会给我们一个开始“推出自己的”解决方案的好地方。 –

+0

是的,这可能有点令人困惑,但DBDeploy for PHP实际上完全是作为Phing任务在PHP中实现的DBDeploy的“想法”。该脚本实际上非常简单,因此根据您的需求进行修改应该非常简单。祝你好运! – poisson

0

如何:

  1. 把你的脚本文件夹中。
  2. 循环浏览文件夹并执行脚本。
  3. 删除/移动脚本文件一旦执行。

听起来像一个黑客,但它是简单的方式imo。

+0

dbdeploy运行方式的一个优点是它可以永久存储更改并跟踪哪些已运行。通过这种方式,它们存在于所有开发人员在其开发环境中运行的版本控制中。例如,我可以从新的数据库开始,运行dbdeploy并保持最新状态。我可以任意多次这样做。 –

-1

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

+0

ExecTask在这种情况下如何提供帮助?问题的作者是要求解决方案跟踪哪些脚本已经运行,因此它不会再运行。 ExecTask无法实现这一点。所以我只是想知道...... – poisson

+0

正如链接手册所示,这只是一个开始。最好是随着时间的推移创建一个Phing Task。实际上,OP要求脚本在每次部署时执行一次,所以原始问题并不是那么精确,而不是我怎么理解,部署一次必须针对相同版本进行特定部署(特定系统)?在多个系统上? ... – hakre