gpt4 book ai didi

ruby-on-rails - 解决 Rails 孤立迁移的最佳方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:00:23 27 4
gpt4 key购买 nike

我一直在一个项目的分支之间切换,每个分支都有不同的迁移......这是场景:

$ rake db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
...
up 20130307154128 Change columns in traffic capture
up 20130311155109 Remove log settings
up 20130311160901 Remove log alarm table
up 20130320144219 ********** NO FILE **********
up 20130320161939 ********** NO FILE **********
up 20130320184628 ********** NO FILE **********
up 20130322004817 Add replicate to root settings
up 20130403190042 ********** NO FILE **********
up 20130403195300 ********** NO FILE **********
up 20130403214000 ********** NO FILE **********
up 20130405164752 Fix ap hostnames
up 20130410194222 ********** NO FILE **********

问题是 rake db:rollback 根本不工作,因为缺少文件...

我应该怎么做才能再次回滚并摆脱 NO FILE 消息?

顺便说一句,rake db:resetrake db:drop 不是一个选项,我不能丢失其他表中的数据...

最佳答案

我最终是这样解决问题的:

(1) 转到有迁移文件的分支并回滚它们。当您有许多分支时,这不是微不足道的,如果您尝试 merge 它们会导致许多冲突。所以我使用这个命令来找出每个孤立迁移所属的分支。

因此,我需要找到上次修改迁移的提交。

git log --all --reverse --stat | grep <LASTEST_ORPHAN_MIGRATION_ID> -C 10

我采用提交哈希并确定它属于哪个分支,如下所示:

git branch --contains <COMMIT_HASH>

然后我可以回到那个分支,进行回滚并对所有丢失的文件重复这个过程。

(2) 运行迁移:检查您最终要处理的分支并运行迁移,您应该可以开始了。

疑难解答

在某些情况下,我还在已删除的分支上运行孤立迁移。

为了解决这个问题,我创建了与丢失文件具有相同 migration_id 的虚拟迁移文件,并将它们回滚。在那之后,我能够删除他们的虚拟迁移并拥有干净的迁移状态:)

另一种方法是直接从数据库中删除丢失的文件(rails dbconsole):

delete from schema_migrations where version='<MIGRATION_ID>';

关于ruby-on-rails - 解决 Rails 孤立迁移的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16041790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com