Rails 5, RSpec: données D'environnement introuvables dans le schéma
Après la mise à niveau D'une application Rails vers Rails 5, l'exécution de tests RSpec me donne l'erreur suivante:
rails aborted!
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment:set RAILS_ENV=test
Cependant, que bin
n'existe pas et je n'arrive pas à générer avec bundle binstubs rails
ou de rake rails:update:bin
.
J'ai aussi essayé:
rails db:environment:set RAILS_ENV=test
rake db:environment:set RAILS_ENV=test
Il y a un problème connexe sur Github ici.
Comment puis-je corriger cette erreur?
6 réponses
Nouvelle commande Rails 5 pour générer des binstubs:
rails app:update:bin
Me permet d'exécuter la solution comme l'erreur suggéré:
bin/rails db:environment:set RAILS_ENV=test
Astuce de @ max commentaire: si vous utilisez database_cleaner
et que cette erreur continue à apparaître, changez votre configuration en:
DatabaseCleaner.clean_with(
:truncation,
except: %w(ar_internal_metadata)
)
Correction pour jenkins avant de supprimer la base de données, vous devez exécuter db:environment:set
avec || true
, afin que la commande n'abandonne pas:
bin/rails db:environment:set RAILS_ENV=test || true
Pour moi, cette erreur a été suivie d'une erreur similaire demandant une migration.
Cela a fait l'affaire: rails db:migrate RAILS_ENV=test
Pour moi, je devais faire un mélange de choses:
bin/rails db:environment:set RAILS_ENV=test
bin/rails db:migrate RAILS_ENV=test
Cela ferait fonctionner les choses, puis j'ai dû revoir mes migrations, j'ajoutais un null: false dans une relation et cela ajoutait un bug, la migration était annulée et ne s'est pas terminée
J'ai dû laisser tomber ma base de données pour les tests et la créer à nouveau:
psql
DROP DATABASE your_db_name_test;
bundle exec rake db:create RAILS_ENV=test
Après cela, l'avertissement bin/rails db:environment:set RAILS_ENV=test
a disparu.
Toutes les réponses ci-dessus sont correctes, cependant, si vous êtes dans un projet plus unique tel que le développement d'un moteur rails avec un concept de schéma (hacky, je sais) et que votre migration échoue pour une raison quelconque, vous pouvez le réexécuter sans la vérification qui déclenche cette exception. Exemple:
rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1