2008-12-18 22 views
2

设置如下: Drupal项目,一个svn回购与干线/ qa /生产就绪分支,每个分支的虚拟主机,后提交钩将存储库中的文件复制到docroots。Drupal部署/测试/不知道怎么叫它工具

问题在于:Drupal网站经常不仅依赖于源代码,还依赖于数据库数据(节点类型,它们的设置等)。

我正在寻找解决方案来使此更改可版本化。但不像'区分'数据库中的所有数据,而是像单元测试中的装置一样。

具有SQL数据和文件的Fixture-like脚本,其内容应该是可版本化的,并在主后提交后应用。

是否有为此目的而写的东西,或者可能很容易适应某种构建工具(如Apache Ant)或单元测试框架。如果这个工具知道drupal,那将是非常好的,所以在脚本中我可以做些什么,比如variable_set(),drupal_execute()

任何想法?或者我现在应该开始编码而不是问这个问题了? :)

回答

2

这听起来像你已经有一些你写的基础设施。

所以我开始编码!目前我没有意识到这一点,对此特别有用。如果有的话,我想可能需要一些努力才能将它与现有的基础架构结合起来。所以开始编码似乎是一种方法。

我的做法是在文件名的开头使用带有版本号的sql补丁文件(包含sql语句的文件来升级数据库模式/数据)。数据库然后包含一个带有配置信息的表格(你可能已经有了这个),它包含了数据库所在版本的信息。

然后,您可以采取多种方法来自动应用修补程序。其中一个是你从postcommit调用的脚本,用于检查数据库所在的版本,然后检查你有补丁的最新版本是否比db版本更新,并将它应用于/如果是的话)。

db修补程序应该始终通过更新配置表中的前述版本号来完成。

此方法可以扩展为包含基于完整转储文件设置新数据库,然后应用任何必要的修补程序以升级它的能力。

0

我的做法是在文件名开头使用带有版本号的sql补丁文件(包含sql语句的文件来升级数据库模式/数据)。

我在考虑使用所需数据库结构的文件(xml或其他)以及应用必要更改的工具。

是的,经过更多研究,我同意:编写代码比调整一些其他解决方案更容易。尽管drupal模块中的一些例程会对我有所帮助。

0

你可能想看看这本书Refactoring Databases

我从一位作者那里听到的建议是有一个脚本,可以将数据库从版本升级到版本,而不是每次从头开始构建。

+0

Drupal的问题在于几乎所有东西都存储在数据库中,并且通常很难区分配置,内容和“一次性东西”(缓存,日志等)。为了使它更加困难,您经常使用与“内部”资料相同的ID序列来生成用户内容。 – 2008-12-18 17:13:48

1

难道这个演示在最近的一次会议(slideshare link) - 我强烈建议你使用特定的站点自定义模块,其.install文件包含版本“更新”功能,该做的数据库模式更改和设置/配置更改的繁重工作。

它确实比保留.sql文件要好,因为Drupal会跟踪哪些已经运行并为您提供批处理机制,因为它需要对大量数据进行长时间的批量操作。