2009-09-03 28 views
3

我们有一组开发人员,他们每个人都将使用Rails工具为我们的系统开发数据库迁移。迁移似乎首先是管理对数据库模式的更改的一种好方法,但随着我们的继续,以分布式方式管理更改变得越来越困难。如果我们各自发展自己的移民,我们如何调和发生的问题?您如何管理Ruby on Rails迁移与开发团队?

要具体谈谈这些问题,想象以下场景时间表:

  1. 开发人员A创建了上午9:00
  2. 开发人员B一个新的迁移文件时间戳10创建另一个新的迁移文件时间戳: 00
  3. 开发人员B检查中日10:00迁移上午11:00
  4. 在日上午9:00迁移开发A检查在上午11:30

这里可能会出现一些问题,尤其是当两个迁移文件在其更改中发生冲突时,但最基本的问题是某些人在早上9点迁移时运行了上午10:00的迁移签入。与迁移相关的时间戳当然是文件创建时的时间,而不是签入时的时间戳,这会弄乱Rails迁移器。

这是一个可解决的问题,但解决方案可能有很多不同的选项。解决这个问题的最好方法是什么(或者至少是一个好方法)?

+0

这更多关于我的好奇心比什么都重要,但是你有没有试过你描述的情景?发生了什么? –

回答

6

这似乎更像是一个团队沟通问题,或者一个普通的过程问题。迁移版本从序列号更改为时间戳,以避免开发人员A和B使用相同版本创建迁移的问题。

为了避免迁移冲突:

  • 始终保持球队的循环,当谈到创作迁移。这应该避免所有问题。
  • 在检查代码更改回共享主repo之前,始终从存储库中提取并测试迁移(并运行测试套件)。这是一个应该始终遵循的安全网。

现在你的情况是这样的:

  1. 开发人员A创建了上午9:00
  2. 开发人员B一个新的迁移文件时间戳创建了10:00
  3. 另一个新的迁移文件时间戳
  4. 开发人员B从存储库中取出。意识到没有新的变化,迁移日期为10:00 am在上午11:00
  5. 开发人员从存储库中拉取,运行迁移和测试套件,解决所有冲突并在上午11:30将其压入存储库(确定,也许11:35)。

从不无法确定您的更改不会导致冲突或中断生成,而是推送到共享仓库。

+1

我认为这不是一个过程问题,但缺乏内置检查,不会发生问题。使用普通文件的版本控制,当您更新并出现冲突时会出现错误。有了足够的开发人员和足够复杂的模式,这可能无法扩展。想象一下,您不必检查一次检查,但需要检查几十次。这是不太可能的情况,但这是我所关心的。 尽管如此,这对于小团队来说可能是一个很好的方法,所以我对此进行了投票。 –

+1

恕我直言迁移比我见过的其他任何东西都要好。您通常如何跟踪和管理团队中的数据库更改?会不会有更多的支票?当然......但这几乎是SCM的一个插件,可以检测和处理这些冲突。 – txwikinger

0

我们总是创建一个bootstrap rake任务。此任务会丢弃开发数据库,​​依次运行所有迁移,然后使用伪造测试数据填充它。

除了要使用应用程序中的大量内容之外,还必须运行所有迁移。如果你在提交你的东西之前这样做了,那么你确定所有的迁移都可以用于其他人。