我们有一个带有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 rebase
和git merge
发生时,它会变得复杂。
有没有更好的方法来并行处理代码和数据库的版本控制?或者我每次想要改变分支时都注定要运行烦人的rake
任务?
答案 0 :(得分:0)
对此没有简单的答案。您可以设置类似git钩子的东西来检查schema.rb
的更改,如果有任何更新,则无法检出;但是在这样的设置中有很多边缘情况需要检查。
最终,责任在于人类开发人员恢复其环境的未受影响的部分 - 例如数据库 - 在切换分支之前进入干净状态。