我正在开发一个带有相当多git分支的rails应用程序,其中许多分支都包含数据库迁移。我们尽量小心,但偶尔master中的一些代码会请求在另一个分支中删除/重命名的列。
将git分支与DB states?“耦合”起来,
这些“状态”真的会是吗?
如果数据库的大小只有几GB,我们就不能简单地复制它。
应该发生什么?
我们目前使用MySQL,mongodb和redis
编辑:看起来我忘了提到一个非常重要的点,我只对开发环境感兴趣,但是有很大的数据库(几GB大小)。
发布于 2011-01-19 21:39:11
在任何分支中添加新迁移时,请运行rake db:migrate
并同时提交迁移和 db/schema.rb
如果这样做,在开发中,您将能够切换到具有不同迁移集的另一个分支,并简单地运行rake db:schema:load
。
请注意,这将重新创建整个数据库,并且现有数据将丢失。
您可能只想在一个非常小心的分支上运行生产,所以这些步骤在那里不适用(只需像往常一样在那里运行rake db:migrate
)。但在开发过程中,从模式重新创建数据库应该没什么大不了的,这正是rake db:schema:load
要做的。
发布于 2011-01-20 23:14:45
如果您有一个不容易复制的大型数据库,那么我建议您使用普通的迁移工具。如果你想要一个简单的过程,这是我推荐的:
rake db:rollback
)到分支点之前的状态。然后,在切换分支之后,运行db:migrate
。这在数学上是正确的,只要您编写down
脚本,它就会工作。发布于 2012-11-15 14:57:36
下面是我编写的一个脚本,用于在包含不同迁移的分支之间进行切换:
https://gist.github.com/4076864
它不会解决你提到的所有问题,但给出一个分支名称,它会:
<代码>H110更新测试数据库<代码>H211<代码>G212
我发现我自己在我们的项目中一直在手动做这件事,所以我想自动化这个过程会很好。
https://stackoverflow.com/questions/4735058
复制相似问题