0
Help us understand the problem. What are the problem?

posted at

updated at

rails db:seedできなくなった

rails db:seed できなくなった

rails db:seed とは

Railsには、初期データを追加するためのシード機能が備わっており、「seed.rb」ファイルにデータを記述していきます。
例えば、

Customer.create!(
 email: "aaa@amail.com",
 password: "a12345",
 nickname: "れいこ",
 profile: "令和生まれの道子です。",
)

こんな感じでCustomersテーブルのそれぞれのカラムにデータを保存(create!)します。
このような記述の集まりが、「seed.rb」ファイルで、それを実行するのが、rails db:seedというわけです。

エラー

rails db:seedをすると、既にemailがデータベースにあるようで、バリデーションエラーとなりました。

TRY

  1. x
rails db:reset
rails db:seed
  1. x
rails db:drop
rails db:migrate
rails db:seed

そもそも

rails db:reset

  • rails db:drop と rails db:setupを連続して行うコマンド

rails db:drop

  • database.ymlの設定に従って、データベースを削除するコマンド

rails db:setup

  • 全てのデータベースを作成し、全てのスキーマをロードし、seedデータで初期化するコマンド
  • rails db:create rails db:schema:load rails db:seedを連続して実行するコマンド

rails db:create

  • データベースの設定に従ってデータベースを作成するコマンド

rails db:schema:load

  • データベーススキーマの最新の状態のキャプチャである「schema.rb」ファイルでデータベースを作成するコマンド

rails db:migrate

  • 未実行のマイグレーションファイルを実行するコマンド

つまり

  • 1は、
rails db:drop
rails db:create
rails db:schema:load
rails db:seed
rails db:seed

と同じであり、もう既に初期データが追加されたのに、もう一度追加しようとしたわけなので、できるわけないよね〜

  • 2は、コマンドはそのままだけど
    rails db:dropした後に、rails db:migrateしているから、データベースがないところに、マイグレーションファイルを実行しているから、そりゃ無理っしょ、となるのかな。

解決

以下のコマンドで解決しました。

rails db:drop
rails db:create
rails db:schema:load
rails db:seed

rails db:drop
rails db:setup

こちらのサイト
https://eiji-hb.hatenablog.com/entry/2019/12/19/225008
のを見てとりまやってみて解決したのですが、1つ1つ何をしているか見るとどこでなぜコケたのかよく分かりました。

まとめ

  • 1つ1つ何を担っているのか知ることが大事
  • 問題の切り分けをすることが必要ですね
  • ちなみに、今回で言うと、途中「ああああああああ!!」ってなりましたが、
    • マイグレーションファイルがおかしい
    • データが残っている
                         の2つに当たりをつけてました。

これからは、落ち着いて仮説と検証を繰り返すスタイルを確立させたいと思います!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?