我碰巧删除了迁移,我不想还原这些已删除的迁移。
这是rake db:migrate:status
产生的结果:
Status Migration ID Migration Name
------------------------------------------------------
up 0 ********** NO FILE *********
up 20150209023430 Create users
up 20150320184628 ********** NO FILE **********
up 20150322004817 Add roles to users
up 20150403190042 ********** NO FILE **********
由于缺少文件,rake db:migrate
和rake db:rollback
命令将不起作用。
我无意丢失数据,因此不想使用rake db:drop
或rake db:reset
。
我可以做些什么来执行迁移和回滚,以及如何删除丢失的文件?
3条答案
按热度按时间sycxhyv71#
Alexandria ,你可以摆脱那些不存在的迁移。当你做
rake db:migrate:status
它会显示在问题。因此您可以使用纯SQL查询从
schema_migrations
表中手动删除这些版本。delete from schema_migrations where version = <version_number>
通过执行上面的查询,它将被解析。9udxz4iz2#
如果您可以找到迁移的时间戳(文件名的数字部分),则可以执行以下操作:
您可以使用
rake db:migrate:status
查找时间戳编辑-迁移文件已被不可恢复地删除时
您可以通过创建一个空迁移文件,迁移,然后回滚两次来解决此问题。然后,确保在再次迁移之前删除空迁移文件。
jjjwad0x3#
我已经删除了要回滚的迁移。
所以我:
1.重新创建了相同的迁移,
1.以Rails想要的时间戳命名迁移文件,
1.运行
rake db:rollback STEP=1
而且奏效了。