我碰巧删除了迁移,我不想还原这些已删除的迁移。
这是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
。
如何才能执行迁移和回滚以及如何摆脱丢失的文件?
答案 0 :(得分:6)
亚历山大,你可以摆脱那些不存在的迁移。
当你执行rake db:migrate:status
时,它会显示在问题中。
因此您可以使用纯SQL查询从schema_migrations
表中手动删除这些版本。
delete from schema_migrations where version = <version_number>
通过执行上面的查询,它将被解决。
答案 1 :(得分:3)
如果你能找到迁移的时间戳 - 文件名的数字部分,那么你可以这样做:
rake db:migrate:down VERSION=20100905201547
您可以使用rake db:migrate:status