😸

【Rails7】ActiveRecord::NoEnvironmentInSchemaErrorの対応

2023/08/27に公開
  • 次も同じエラーになったときの対応として記事にしました。
  • 今回の対応はdocker-composeの書き方により対象方法が変わります。
  • エラーの解決方法が分からなかったので、エラーに対して解消するための方法ではありません。データの保存場所を変えて対応しました。

環境

・Rails: 7.0(APIモード)
・ruby: 3.2
・docker-compose

発生状況

1、DBのテーブルのカラムを追加しようと、$ rails g migration AddXXXX ToXXXX XXXX:XXXXを実行
2、マイグレーションの中身を変更し、bundle exec rails db:migrateを実行したが、変更の仕方が悪く下のエラー発生

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

3、ある記事を参考に $ rails db:migrate:resetを実行すると、下のエラー発生

rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

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

        bin/rails db:environment:set RAILS_ENV=development

Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

対応方法①

1、発生状況の3のエラーが発生したことにより、下の記事を参考に作業を実行
https://qiita.com/mat827/items/b165f90a6703583b73ba
(a)カラムを追加しようとしたmigrationファイルを削除
(b)最初に作成していたmigationファイルにカラムを追加
(c)マイグレーションを実行
すると、上記と同じエラーが発生

rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

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

        bin/rails db:environment:set RAILS_ENV=development

Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

2、上記のエラー文通り下記を実行
# bundle exec rails db:environment:set RAILS_ENV=productionを実行すると下記のエラー発生

rails aborted!
ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit`
/myapp/config/environment.rb:5:in `<main>'
Tasks: TOP => db:environment:set => db:load_config => environment
(See full trace by running task with --trace)

対応方法②

今回のエラーに対する解決法は分かりませんでした。
よって、下の1〜7を実行することでエラーの対応は出来ました。
1、docker-compose.ymlの下記のmysql箇所をmysql3などに変更
(a)
・services: db: volumes: - mysql-data:/var/lib/mysql
            ↓(変更)
・services: db: volumes: - mysql3-data:/var/lib/mysql
(b)
・volumes: mysql-data:
    ↓(変更)
・volumes: mysql3-data:
2、$ docker-compose down
3、$ docker-compose build
4、$ docker-compose up -d
5、$ docker-compose exec [コンテナ名] bash
 (例)docker-compose exec backend bash
6、# rails db:create
7、# rails db:migrate

参考になれば嬉しいです。

Discussion