web-dev-qa-db-ja.com

Rails 5、Rspec:環境データがスキーマに見つかりません

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 に関連する問題があります。

このエラーに対処するにはどうすればよいですか?

50
steel

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)
)
59
steel

データベースを削除する前にjenkinsを修正してくださいdb:environment:set with || trueので、コマンドは中断しません。

bin/Rails db:environment:set Rails_ENV=test || true
8
Exsemt

私にとっては、このエラーの後に移行を求める同様のエラーが続きました。

これでうまくいきました:Rails db:migrate Rails_ENV=test

7
Mirror318

上記の答えはすべて正しいですが、スキーマの概念を備えたRailsエンジン(ハッキング、私は知っています)を開発するなど、よりユニークなプロジェクトにいて、移行が失敗した場合何らかの理由で、この例外をスローするチェックなしで再実行できます。

rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1

5
Cole Jurden

私にとって、私は物事の混合物をしなければなりませんでした:

bin/Rails db:environment:set Rails_ENV=test
bin/Rails db:migrate Rails_ENV=test

これで問題が解決し、移行を確認する必要がありました。関係にnull:falseを追加していたため、バグが追加され、移行がキャンセルされて終了しませんでした

テストのためにデータベースを削除し、再度作成する必要がありました。

  1. psql
  2. DROP DATABASE your_db_name_test;
  3. bundle exec rake db:create Rails_ENV=test

その後、警告bin/Rails db:environment:set Rails_ENV=test消えました。

2
Evmorov