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?
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)
)
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
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
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
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:
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
disparu.