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?

41
demandé sur steel 2016-07-05 20:22:49

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)
)
45
répondu steel 2017-08-22 14:30:31

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
8
répondu Exsemt 2017-01-20 15:09:52

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

7
répondu Mirror318 2016-07-12 02:59:46

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

2
répondu Sergio Ocón Cárdenas 2018-01-19 11:38:10

J'ai dû laisser tomber ma base de données pour les tests et la créer à nouveau:

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

Après cela, l'avertissement bin/rails db:environment:set RAILS_ENV=test a disparu.

1
répondu Evmorov 2017-08-31 12:15:58

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

1
répondu Cole Jurden 2018-02-16 00:55:03