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 –

相關問題