Railsの移行の編集を間違えました(Rails 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がそのドロップコマンドをどこから取得しているのかを確認することもしましたが、何も見つかりませんでした。
だから私の質問は、この移行を再実行するにはどうすればよいですか?そして、私はrailsがそのドロップコマンドをどこで取得しているのか知りたいですか?
更新down
:rails 3.1は、ロールバック時に実際には移行クラスのメソッドを参照しないことが判明しましたメソッドの移行コマンドを調べて、change
それらを逆にします。そのため命令rake db:rollback
を削除した後でもアセットテーブルを削除しようとしていましたdrop_table :assets
これを修正したchange
メソッドを古いrails3.0スタイルup
メソッドに変更したことです。次に、railsはコマンドをdown
削除したメソッドをdrop_table