如何合并Drupal数据库更改

时间:2009-10-09 18:50:01

标签: database drupal merge

我们目前使用SVN存储库来确保每个人的本地环境都保持最新。但是,Drupal网站开发有点棘手,因为您编写的任何自定义代码(例如,为节点主体编写的PHP代码)都存储在数据库中,并且SVN工作副本无法识别这些更改。

目前有一些开发人员正在Drupal网站的同一区域工作,但我们不确定如何最好地将我们本地的Drupal数据库更改合并在一起。提交数据库转储补丁最多看起来很笨拙,而且很可能是低效且容易出错的。

对于如何处理此问题的任何建议表示赞赏!

4 个答案:

答案 0 :(得分:5)

不幸的是,数据库部署/更新是Drupals的一个弱点。有关如何处理它的一些建议,请参阅this question & answers以及this one

至于CCK,您可以找到一些提示here

至于内容中的php代码,我同意googletorp,你应该避免这样做。但是,如果由于某种原因你绝对必须这样做,你可以尝试将代码简化为简单的函数调用。因此,您将在模块中拥有该功能(这将通过SVN进行跟踪)。但是,你只需要一点点就不再需要内联代码......

答案 1 :(得分:4)

如果你将PHP代码放入数据库,那么你做错了。有些东西在数据库中,如视图和cck字段以及一些设置。但是如果你把php代码放在节点体中,那你就会产生很大的代码维护问题。你应该真的使用API​​和钩子。使用eval等创建模块而不是丑陋的黑客。

答案 2 :(得分:2)

以上所述的一切都是真实而好的建议。为了回答您的实际问题,您可以使用一些最近的模块来传输各种开发人员所做的更改。

“功能”模块可以解决Drupal所描述的问题,它经常提供很好的功能,尽管在DB中存储了大量的配置和结构。此模块使您可以捕获功能并将其作为伪模块输出(具有.info和代码文件以及所有模块的资格)。以下是它的工作原理:

  1. 选择要导出的功能/功能
  2. 该模块分析在其他地方重建该功能所需的模块,文件,数据库内容
  3. 该模块创建一个伪模块,其中包含#3中的指令,并将所有内容(甚至是用于重建数据库中的内容的SQL)输出到模块包中(以及为所需的其他模块设置依赖项)。
  4. 在新网站上安装伪模块并启用它
  5. 伪模块复制您导出的重建数据库数据和所有
  6. 的功能

    你可以告诉你的老板你用剃刀重点手动完成所有这一切,以避免出现1个错误;) 我希望这会有所帮助 - http://drupal.org/project/features

答案 3 :(得分:1)

通过提交数据库转储补丁,您的意思是在每次更改后获取数据库的整个摘录并提交它吗?

数据库的主副本怎么样?将所有表格,视图,sps等提取到单个文件中,将它们放入svn并对各个对象进行合并编辑?