移行ファイルを削除/削除したい。それをどうやってやるの?ここにも同様の質問がありますが、更新として、スクリプト/破壊を行うよりも良い方法がありますか?
また、移行を削除/削除する場合は、db:reset
またはdb:drop
を実行する必要がありますか?
私は通常:
rake db:migrate VERSION=XXX
をすべての環境で、削除する前のバージョンに実行します。rake db:migrate
を再度実行します。アプリケーションが既に実稼働またはステージングにある場合、テーブルまたは列を破壊する別の移行を記述する方が安全です。
移行に関するもう1つの優れたリファレンスは、 http://guides.rubyonrails.org/migrations.html です。
移行を削除する別の方法:
$ Rails d migration SameMigrationNameAsUsedToGenerate
データベースの変更は永久に残るため、rake db:migrate
が実行される前に使用してください:)-または変更を手動で削除します
アプリのホームディレクトリから以下のコマンドを実行します。
rake db:migrate:down VERSION="20140311142212"
(ここで、バージョンは、移行が作成されたときにRailsによって付加されるタイムスタンプです。このアクションは、この移行によるDBの変更を元に戻します)
Run "Rails destroy migration migration_name"
(migration_nameは、移行の作成時に使用するものです。移行ファイル名から「timestamp _」を削除して取得してください)
使用できますが、
$ Rails d migration table_name
移行が削除されます。
移行ファイルを削除してから、schema_migrationsテーブルの対応するエントリをデータベースから削除することがありました。きれいではありませんが、動作します。
削除したい移行が欠落していたため、これらの答えはどれも私が抱えていた問題に完全に適合していませんでした。問題は、移行が実行されると、Railsがデータベースのschema_migrations
テーブルにバージョンを追加することです。したがって、データベース構造またはスキーマにリストされていなくても、Railsはそれを探します。以下を実行することにより、これらの孤立した移行を明らかにすることができます。
Rails db:migrate:status
欠落している移行のバージョンに注意して、dbコンソールに進みます。
Rails dbconsole
次に、移行テーブルからバージョンを手動で削除します。
delete from schema_migrations where version='<version>';
あなたは今、良いはずです。
私はちょうどこの同じ問題がありました:
それは私のためにそれを修正しました