現在、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を実行して再起動するように指示されます。
すでに存在しているようです。保留中の移行をキャンセルする方法はありますか?
移行が途中で失敗した可能性があります(したがって、テーブルは作成されましたが、終了しませんでした)。
開発環境を使用しているだけなので、データベースを削除して最初から再構築してもかまいません。
rake db:drop
rake db:create
rake db:migrate
場合によっては、ローカルの開発データベースを削除することもお勧めできません。 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;
その移行をもう必要としない場合。
私のように、Railsの外部でデータベース構造を維持している場合は、db/migrationから移行ファイルを削除するだけです。 Rails generateコマンドを使用してモデルクラスを作成すると、移行ファイルも作成されることを忘れて、OPの質問でエラーが発生しました。
データベース構造を維持するためにRailsに依存している場合は、このメソッドを使用しないでください!
Rails構造ファイルは、以下を使用してデータベースから構築することにより、最新の状態に保ちます。
bundle exec rake db:structure:dump