4
3

More than 3 years have passed since last update.

[rails] migrate:reset でのエラー

Posted at

はじめに

railsでアプリを作成していた際、db:migrateをした際に、エラーが発生しめmigrate:resetをしたのですがその際初めてのエラーが発生したので、その備忘録として書きたいと思います。

最初のエラー

新しくテーブルを作成するためにマイグレーションファイルを編集して実行したところファイル内に記述していたテーブル名に記述ミスがあり、エラーが発生しました。

class CreateHoges < ActiveRecord::Migration[5.2]
  def change
    create_table :hoges do |t|
      t.references :huge
      t.text :text
      t.timestamps
    end
    add_foreign_key :hoges, :missname, column: :huge_id  # missnameが記述ミス
  end
end

そのため、記述を直し改めてマイグレーションファイルを実行したところ以下のエラーが発生しました。

rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "hoges" already exists: CREATE TABLE "hoges"

どうやらテーブルは既に存在しているといって、エラーが起きているようです。
まさかと思いテーブルを確認しても出来ていません。
rails db:migrate:status で確認してもステータスは downになっていました。

原因

どうやらmigrationの際に、処理が途中まで進んで、残りでエラーが起きているときは、テーブルは生成されているけれどもテーブルを生成したmigrationは未実行のステータスになっていることがあるようです。
(create_tableのあと、add_foreign_keyしたところにエラーがあって、というパターン)

migrate:reset

ならば、一度データベースを全て削除した上で、再度実行したら直りそうです。
以下のコマンドを実行

rails db:migrate:reset

そしたら、またもやエラー

rake aborted!
ActiveRecord::NoEnvironmentInSchemaError:

Environment data not found in the schema. To resolve this issue, run:

        bin/rails db:environment:set RAILS_ENV=development

なんだこれは、と思い調べたところ、どうやら指示されるようにコマンドを入力したら直りそうです。
以下の記事が、とても参考になります。
ActiveRecord::NoEnvironmentInSchemaErrorについて

解決

まず指示されるまま以下のコマンドを実行

 rails db:environment:set

そして、再度以下のコマンドを。

rails db:migrate:reset

ようやく正常にテーブルを作成することができました。

おわり

今回はmigrate:resetで解決しましたが、もし他のテーブルに影響を与えない方法があるならば、教えていただければ幸いです。
最後まで読んでいただき、ありがとうございました。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3