72 votes

Rails 5, Rspec : Données d'environnement non trouvées dans le schéma

Après avoir mis à niveau une application Rails vers Rails 5, l'exécution des 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, cette bin n'existe pas et je ne parviens pas à le générer avec bundle binstubs rails ou avec rake rails:update:bin .

J'ai également essayé :

rails db:environment:set RAILS_ENV=test
rake db:environment:set RAILS_ENV=test

Il existe un problème connexe sur Github aquí .

Comment puis-je remédier à cette erreur ?

2 votes

D'une manière générale, il s'agit d'un changement terrible, sur-ingénierie et sur-complication. env RAILS_ENV={{whatever}} bin/rake db:migrate spec fonctionnait très bien avant

89voto

steel Points 793

Nouvelle commande Rails 5 pour générer des binstubs :

rails app:update:bin

Cela me permet d'exécuter la solution comme le suggère l'erreur :

bin/rails db:environment:set RAILS_ENV=test

Astuce du commentaire de @max : 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)
)

47 votes

Si vous utilisez database_cleaner et que cette erreur continue d'apparaître, changez votre configuration en DatabaseCleaner.clean_with :truncation, except: %w(ar_internal_metadata) - github.com/DatabaseCleaner/database_cleaner/issues/445

1 votes

Omg, la solution db_cleaner fonctionne ! :P Je ne savais pas que l'environnement était défini dans cette table.

0 votes

Dans quel fichier ce code va-t-il pour le minitest ? Erreur toujours présente avec le code dans test/test_helper.rb

13voto

Cole Jurden Points 41

Toutes les réponses ci-dessus sont correctes, cependant, si vous êtes dans un projet plus unique comme 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 la réexécuter sans la vérification qui lance cette exception. Exemple :

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

12voto

Mirror318 Points 307

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

8voto

Exsemt Points 798

Correction pour jenkins avant d'abandonner la base de données vous devriez exécuter db:environment:set con || true pour que la commande n'échoue pas :

bin/rails db:environment:set RAILS_ENV=test || true

5voto

Pour moi, j'ai dû faire un mélange de choses :

bin/rails db:environment:set RAILS_ENV=test
bin/rails db:migrate RAILS_ENV=test

Cela permettait de faire fonctionner les choses, puis j'ai dû revoir mes migrations, j'ajoutais un null:false dans une relation et cela a ajouté un bug, la migration a été annulée et n'a pas été terminée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X