web-dev-qa-db-ja.com

Rails:保留中の移行を削除する方法

現在、Ruby on Railsチュートリアル: http://guides.rubyonrails.org/getting_started.html をフォローしています。

データベースにデータを保存しようとしています。ただし、実行すると:Rails server次のエラーが表示されます。

Migrations are pending. To resolve this issue, run: bin/rake db:migrate Rails_ENV=development

私は他の記事を見て、実行したとき:

bin/rake db:migrate 

rake aborted!

実行後:

rake db:abort_if_pending_migrations....

私はそれを見る:

You have 1 pending migration:
20150805200129 CreateDatabases

SQLite3::SQLException: table "databases" already exists:

また、rake db:migrateを実行して再起動するように指示されます。

すでに存在しているようです。保留中の移行をキャンセルする方法はありますか?

20
Kenny Ellis

移行が途中で失敗した可能性があります(したがって、テーブルは作成されましたが、終了しませんでした)。

開発環境を使用しているだけなので、データベースを削除して最初から再構築してもかまいません。

rake db:drop
rake db:create
rake db:migrate
12
EugZol

場合によっては、ローカルの開発データベースを削除することもお勧めできません。 Railsアプリケーションで特定の移行を削除/破棄するより良い方法があります。

Rails d migrationコマンドを使用して、特定の移行を破棄できます。

Rails d migration MigrationName

特定の移行に対応する変更を取り消すには、次のようなdb:migrate:downメソッドを使用できます。

rake db:migrate:down VERSION=XXX

時には物事が面倒になり、そのような状況では別の便利なことは、versionが保存されたすべての移行があるデータベースのschema_migrationsテーブルを調べることです。

次のように、このテーブルから特定の移行を削除できます。

delete from schema_migrations WHERE version = VERSION;

その移行をもう必要としない場合。

22

私のように、Railsの外部でデータベース構造を維持している場合は、db/migrationから移行ファイルを削除するだけです。 Rails generateコマンドを使用してモデルクラスを作成すると、移行ファイルも作成されることを忘れて、OPの質問でエラーが発生しました。

データベース構造を維持するためにRailsに依存している場合は、このメソッドを使用しないでください!

Rails構造ファイルは、以下を使用してデータベースから構築することにより、最新の状態に保ちます。

bundle exec rake db:structure:dump
2
curt