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