我如何在代码库修订的同时管理数据库修订?

时间:2015-07-06 10:21:25

标签: database git version-control rake

我们有一个带有PostgreSQL数据库的Rails应用程序。我们使用git进行版本控制。

我们这个项目只有两个开发人员,所以我们都必须做一些事情,当出现紧急情况时,我们经常不得不放弃一切来解决这些问题。

我们有一个主分支(简称为staging),我们只能直接用于快速修复,小副本更改等。对于更大的功能,我们处理独立的功能分支。

当我处理需要更改数据库的功能时,我自然需要创建可以更改架构的迁移。我们假设我正在feature-emoji上工作,我创建了一个迁移20150706101741_add_emoji_to_users.rb。我运行rake db:migrate继续我的工作。

后来,我告知了我需要解决的一些错误。我切换到staging开始工作;但是,现在我的应用程序会出错,因为db模式与应用程序所期望的不匹配。所以git checkout staging之前,我必须记得做rake db:rollback。然后,当我切换回feature-emoji时,我必须再次运行rake db:migrate

当处理两个分支时,整个流程都是好的,但是当git rebasegit merge发生时,它会变得复杂。

有没有更好的方法来并行处理代码和数据库的版本控制?或者我每次想要改变分支时都注定要运行烦人的rake任务?

1 个答案:

答案 0 :(得分:0)

对此没有简单的答案。您可以设置类似git钩子的东西来检查schema.rb的更改,如果有任何更新,则无法检出;但是在这样的设置中有很多边缘情况需要检查。

最终,责任在于人类开发人员恢复其环境的未受影响的部分 - 例如数据库 - 在切换分支之前进入干净状态。