【Rails7】ActiveRecord::NoEnvironmentInSchemaErrorの対応
- 次も同じエラーになったときの対応として記事にしました。
- 今回の対応は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のエラーが発生したことにより、下の記事を参考に作業を実行
(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