我在編輯導軌移植(我使用導軌3.1.0rc5)時犯了一個錯誤。所以我糾正它,並試圖做一個rake db:rollback
,然後是rake db:migrate db:test:prepare
。但由於某種原因,回滾失敗。下面是遷移的回滾部分:導軌移植回滾失敗
def down
drop_table :assets
end
這是來自db:rollback
響應:
== CreateAssets: reverting ===================================================
rake aborted!
An error has occurred, this and all later migrations canceled:
ActiveRecord::IrreversibleMigration
Tasks: TOP => db:rollback
(See full trace by running task with --trace)
所以我只是手動在數據庫中刪除的資產表(我只用sqlite3的DBS) ,註釋掉drop_table :assets
線,並再次運行db:rollback
:
== CreateAssets: reverting ===================================================
-- drop_table("assets")
rake aborted!
An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: no such table: assets: DROP TABLE "assets"
Tasks: TOP => db:rollback
(See full trace by running task with --trace)
爲什麼試圖除去資產表?我注意到(實際上後來刪除)drop_table :assets
行遷移。我甚至做了一個grep -r assets
來查看rails可能從那裏獲得那個drop命令,但是找不到任何東西。
所以我的問題是如何獲得此遷移重新運行?我很好奇Rails在哪裏得到這個下降命令?
UPDATE:原來,導軌3.1實際上回滾時,不會看遷移類的down
方法!它會查看change
方法的遷移命令並將其反轉。這就是爲什麼rake db:rollback
試圖刪除資產表,即使我刪除了drop_table :assets
指令!我如何解決這個問題是我將change
方法更改爲舊的rails 3.0風格up
方法。然後rails看着down
方法,我已經從中刪除了drop_table
命令,並且回滾成功。
有類似的情況(Rails 3.2),並且用'up'替換'change'也適用於我。 – user456584