我们的Rails 4.x项目中存在持续的痛点。
我们以标准方式使用structure.sql
作为测试数据库的基础。在开发过程中,我们每次开发人员运行db:migrate
时都会生成文件。当他们的迁移准备就绪时,他们会提交structure.sql
更改和迁移代码本身。
但是,当多个开发人员部署代码并将迁移部署到我们的暂存环境时,我们遇到了问题。这很容易导致structure.sql
中的合并冲突,主要是因为写入文件底部的新迁移。注意:迁移本身不必触及相同的数据库表,这是一个问题。
这种情况是否有任何常见和/或智能解决方案?我们不期待魔法,但它会导致比我们认为的更多的痛苦。
(我们将要求我们的开发人员更加明智地以正确的方式解决合并冲突,即按正确的顺序排列时间戳,但我们不清楚这将有多大帮助练习 - 我们仍然认为此文件中的冲突可能是向前发展的问题。)
在编辑中:schema.rb
不支持我们的要求,这大约是structure.sql
。
答案 0 :(得分:0)
我为git编写了一个合并驱动程序,以解决与structure.sql的冲突,因此请尝试一下!
https://github.com/knu/git-merge-structure-sql
它将自动合并不可避免和最烦人的冲突类型,包括具有架构版本,数据库引擎版本和AUTO_INCREMENT值的冲突(对于较旧版本的Rails)。
答案 1 :(得分:-1)
这是迁移的主要痛点之一。请记住,structure.sql
是当前db状态的简单sql表示。如果您的开发人员都并行创建和编辑表,则需要以某种方式或其他方式合并它们。一旦你将它们合并到机器上,所以你有一个最新的数据库,你可以使用rake db:schema:dump
创建一个“干净的”新structure.sql
,但如果你在合并时做得很好就没用了
无论如何,我可以给你的个人建议是使用默认的'schema.rb'而不是'.sql'格式,如果你的开发人员喜欢ruby本身而不是sql,那么合并会更容易。