web-dev-qa-db-ja.com

Rails 3の移行ファイルを削除する方法

移行ファイルを削除/削除したい。それをどうやってやるの?ここにも同様の質問がありますが、更新として、スクリプト/破壊を行うよりも良い方法がありますか?

また、移行を削除/削除する場合は、db:resetまたはdb:dropを実行する必要がありますか?

104
alvincrespo

私は通常:

  1. rake db:migrate VERSION=XXXをすべての環境で、削除する前のバージョンに実行します。
  2. 移行ファイルを手動で削除します。
  3. 保留中の移行がある場合(つまり、削除した移行が最後のものではなかった場合)、新しいrake db:migrateを再度実行します。

アプリケーションが既に実稼働またはステージングにある場合、テーブルまたは列を破壊する別の移行を記述する方が安全です。

移行に関するもう1つの優れたリファレンスは、 http://guides.rubyonrails.org/migrations.html です。

139
Fábio Batista

移行を削除する別の方法:

$ Rails d migration SameMigrationNameAsUsedToGenerate

データベースの変更は永久に残るため、rake db:migrateが実行される前に使用してください:)-または変更を手動で削除します

66
Gediminas

アプリのホームディレクトリから以下のコマンドを実行します。

  1. rake db:migrate:down VERSION="20140311142212"(ここで、バージョンは、移行が作成されたときにRailsによって付加されるタイムスタンプです。このアクションは、この移行によるDBの変更を元に戻します)

  2. Run "Rails destroy migration migration_name"(migration_nameは、移行の作成時に使用するものです。移行ファイル名から「timestamp _」を削除して取得してください)

19
fOx

また、ダウンマイグレーションも可能です

rake db:migrate:down VERSION=versionnumber

参照 Rubyonrailsguide

9
Vicky

使用できますが、

$ Rails d migration table_name  

移行が削除されます。

8
Agnes

移行ファイルを削除してから、schema_migrationsテーブルの対応するエントリをデータベースから削除することがありました。きれいではありませんが、動作します。

2
frenesim

4.1ロールバックをご覧ください

http://guides.rubyonrails.org/migrations.html

$ rake db:rollback

1
user1781626

削除したい移行が欠落していたため、これらの答えはどれも私が抱えていた問題に完全に適合していませんでした。問題は、移行が実行されると、Railsがデータベースのschema_migrationsテーブルにバージョンを追加することです。したがって、データベース構造またはスキーマにリストされていなくても、Railsはそれを探します。以下を実行することにより、これらの孤立した移行を明らかにすることができます。

Rails db:migrate:status

欠落している移行のバージョンに注意して、dbコンソールに進みます。

Rails dbconsole

次に、移行テーブルからバージョンを手動で削除します。

delete from schema_migrations where version='<version>';

あなたは今、良いはずです。

0
stackPusher

私はちょうどこの同じ問題がありました:

  1. Rails d migration f-これにより、最後のタイムスタンプを持つ移行が削除されました
  2. Rails d migration f-これは他の移行を削除しました
  3. git statusを使用して、追跡されていないファイルにないことを確認します
  4. Rails g migration f

それは私のためにそれを修正しました

0
Miguel Alatorre