web-dev-qa-db-fra.com

Rails 5, Rspec: données d’environnement non trouvées dans le schéma

Après la mise à niveau de l'application Rails app 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, ce bin n'existe pas et je n'arrive pas à le générer avec bundle binstubs Rails ou avec rake Rails:update:bin.

J'ai aussi essayé:

Rails db:environment:set Rails_ENV=test
rake db:environment:set Rails_ENV=test

Il existe un problème connexe sur Github ici .

Comment puis-je remédier à cette erreur?

50
steel

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

Rails app:update:bin

Me permet d’exécuter la solution selon l’erreur suggérée:

bin/Rails db:environment:set Rails_ENV=test

Conseil de @max comment: Si vous utilisez database_cleaner et cette erreur n'arrête pas de changer, puis changez votre configuration en:

DatabaseCleaner.clean_with(
  :truncation,
  except: %w(ar_internal_metadata)
)
59
steel

réparer pour Jenkins avant de déposer la base de données, vous devez exécuter db:environment:set avec || true, donc la commande n'abandonne pas:

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

Pour moi, cette erreur a été suivie par une erreur similaire demandant une migration.

Cela a fait le tour: Rails db:migrate Rails_ENV=test

7
Mirror318

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 lève cette exception. Exemple:

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

5
Cole Jurden

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, et ensuite je devais revoir mes migrations, j'ajoutais un null: false dans une relation et cela ajoutait un bogue, la migration était annulée et ne se terminait pas.

J'ai dû abandonner ma base de données pour des tests et la recréer:

  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 disparu.

2
Evmorov