2

设置如下:Drupal 项目,一个带有 trunk/qa/production-ready 分支的 svn 存储库,每个分支的虚拟主机,将文件从存储库复制到 docroot 的提交后挂钩。

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

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

带有 SQL 数据和内容文件的 Fixture-like 脚本应该是版本化的,并在主要的 post-commit 钩子之后应用。

是否为此目的编写了任何东西,或者可能很容易适应某种构建工具(如 Apache Ant)或单元测试框架。如果这个工具知道drupal,那就太好了,所以在脚本中我可以做类似的事情variable_set()drupal_execute().

有任何想法吗?还是我应该立即开始编码而不是问这个?:)

4

5 回答 5

2

听起来您已经在那里编写了一些基础设施。

所以我要开始编码了!目前,我知道没有任何东西对此特别有好处。如果有的话,我想它需要一些努力才能让它与您现有的基础设施一起使用。所以开始编码似乎是要走的路。

我的方法是在文件名的开头使用带有版本号的 sql 补丁文件(包含用于升级 db 模式/数据的 sql 语句的文件)。然后数据库包含一个带有配置信息的表(您可能已经有这个),其中包含有关数据库所在版本的信息。

然后,您可以采取多种方法来自动应用补丁。一个是您从 postcommit 调用的脚本,它检查数据库所在的版本,然后检查您有补丁的最新版本是否比数据库所在的版本新,并应用它/它们(按顺序)如果是这样。

db 补丁应始终通过更新配置表中的上述版本号来完成。

这种方法可以扩展为包括基于完整转储文件设置新数据库的能力,然后对其应用任何必要的补丁以对其进行升级。

于 2008-12-18T12:09:33.707 回答
1

在最近的一次会议上对此进行了演示(幻灯片链接)-我强烈建议您使用特定于站点的自定义模块,其 .install 文件包含版本化的“更新”功能,这些功能为数据库架构更改和设置/配置更改。

它绝对优于保留 .sql 文件,因为 Drupal 将跟踪哪些文件已运行,并为您提供批处理机制来处理需要对大量数据进行长时间运行的批量操作的任何事情。

于 2009-01-18T04:07:39.063 回答
0

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

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

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

于 2008-12-18T12:20:15.463 回答
0

您可能想查看Refactoring Databases一书。

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

于 2008-12-18T16:02:34.160 回答
0

以前:Drupal 源代码控制策略?

于 2008-12-18T17:31:45.243 回答