4

我碰巧已经删除了迁移,我不想恢复这些已删除的迁移。有没有办法解决Rails删除的迁移?

这是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:migraterake db:rollback命令将不会因为丢失的文件的工作。

我无意丢失我的数据,所以我不想使用rake db:droprake db:reset

我能做些什么,以便能够执行迁移回滚以及如何摆脱丢失的文件呢?

回答

2

如果你能找到迁移的时间戳 - 文件名的数字部分,那么你可以做:

rake db:migrate:down VERSION=20100905201547 

你可以找到使用rake db:migrate:status

4

亚历山大,你可以摆脱那些不存在的迁移。 当你做rake db:migrate:status它会显示在问题中。

因此,您可以使用纯sql查询从schema_migrations表中手动删除这些版本。

delete from schema_migrations where version = <version_number> 通过执行上面的查询,它将被解析。

+2

或'的ActiveRecord :: SchemaMigration.where时间戳( ).delete_all' –

+2

@AlexanderShmatko为了澄清,可以在where子句中使用数组版本。像这样:ActiveRecord :: SchemaMigration.where(版本:[20170506145701,20170506145702,20170506145703])。delete_all –

相关问题