轨道' structure.sql - 解决痛苦的合并冲突的最佳实践是什么?

时间:2017-05-15 12:16:25

标签: ruby-on-rails ruby-on-rails-4

我们的Rails 4.x项目中存在持续的痛点。

我们以标准方式使用structure.sql作为测试数据库的基础。在开发过程中,我们每次开发人员运行db:migrate时都会生成文件。当他们的迁移准备就绪时,他们会提交structure.sql更改和迁移代码本身。

但是,当多个开发人员部署代码并将迁移部署到我们的暂存环境时,我们遇到了问题。这很容易导致structure.sql中的合并冲突,主要是因为写入文件底部的新迁移。注意:迁移本身不必触及相同的数据库表,这是一个问题。

这种情况是否有任何常见和/或智能解决方案?我们不期待魔法,但它会导致比我们认为的更多的痛苦。

(我们将要求我们的开发人员更加明智地以正确的方式解决合并冲突,即按正确的顺序排列时间戳,但我们不清楚这将有多大帮助练习 - 我们仍然认为此文件中的冲突可能是向前发展的问题。)

在编辑中:schema.rb不支持我们的要求,这大约是structure.sql

2 个答案:

答案 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,那么合并会更容易。