Rails appをRails 5にアップグレードした後、RSpecテストを実行すると次のエラーが表示されます。
Rails aborted!
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/Rails db:environment:set Rails_ENV=test
ただし、そのbin
は存在せず、bundle binstubs Rails
またはrake Rails:update:bin
で生成することはできません。
私も試しました:
Rails db:environment:set Rails_ENV=test
rake db:environment:set Rails_ENV=test
Github here に関連する問題があります。
このエラーに対処するにはどうすればよいですか?
Binstubsを生成する新しいRails 5コマンド:
Rails app:update:bin
エラーが示唆するようにソリューションを実行することができます:
bin/Rails db:environment:set Rails_ENV=test
@maxコメントからのヒント:database_cleaner
を使用していて、このエラーがポップアップし続ける場合は、設定を次のように変更します。
DatabaseCleaner.clean_with(
:truncation,
except: %w(ar_internal_metadata)
)
データベースを削除する前にjenkinsを修正してくださいdb:environment:set
with || true
ので、コマンドは中断しません。
bin/Rails db:environment:set Rails_ENV=test || true
私にとっては、このエラーの後に移行を求める同様のエラーが続きました。
これでうまくいきました:Rails db:migrate Rails_ENV=test
上記の答えはすべて正しいですが、スキーマの概念を備えたRailsエンジン(ハッキング、私は知っています)を開発するなど、よりユニークなプロジェクトにいて、移行が失敗した場合何らかの理由で、この例外をスローするチェックなしで再実行できます。
rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1
私にとって、私は物事の混合物をしなければなりませんでした:
bin/Rails db:environment:set Rails_ENV=test
bin/Rails db:migrate Rails_ENV=test
これで問題が解決し、移行を確認する必要がありました。関係にnull:falseを追加していたため、バグが追加され、移行がキャンセルされて終了しませんでした
テストのためにデータベースを削除し、再度作成する必要がありました。
psql
DROP DATABASE your_db_name_test;
bundle exec rake db:create Rails_ENV=test
その後、警告bin/Rails db:environment:set Rails_ENV=test
消えました。