Rails 5, Rspec: Environment data not found in the schema

陌路散爱 提交于 2019-12-18 12:04:30

问题


After upgrading a Rails app to Rails 5, running RSpec tests gives me the following error:

rails aborted!
ActiveRecord::NoEnvironmentInSchemaError: 

Environment data not found in the schema. To resolve this issue, run: 

    bin/rails db:environment:set RAILS_ENV=test

However, that bin does not exist and I can't seem to generate it with bundle binstubs rails or with rake rails:update:bin.

I have also tried:

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

There is a related issue on Github here.

How can I address this error?


回答1:


New Rails 5 command to generate binstubs:

rails app:update:bin

Allows me to run the solution as the error suggested:

bin/rails db:environment:set RAILS_ENV=test

Tip from @max comment: If you are using database_cleaner and this error keeps popping up then change your config to:

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



回答2:


For me, this error was followed by a similar one asking for a migration.

This did the trick: rails db:migrate RAILS_ENV=test




回答3:


fix for jenkins before you drop database you should execute db:environment:set with || true, so the command doesn't abort:

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



回答4:


All of the above answers are correct, however, if you're in a more unique project such as developing a rails engine with a concept of a schema (hacky, I know) and your migration fails for some reason, you can re-run it without the check that throws this exception. Example:

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




回答5:


For me, I had to do a mixture of things:

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

This would make things work, and then I had to review my migrations, I was adding a null:false into a relationship and that added a bug, the migration was cancelled and didn't finish




回答6:


I had to drop my database for tests and create it again:

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

After that the warning bin/rails db:environment:set RAILS_ENV=test disappeared.




回答7:


If you happen to see this error while using parallel_tests gem then you need to run below command for each DB. Just increase TEST_ENV_NUMBER.

TEST_ENV_NUMBER=1 bin/rails db:environment:set RAILS_ENV=test
TEST_ENV_NUMBER=2 bin/rails db:environment:set RAILS_ENV=test

This helped me fix the problem when I was testing parallel_tests with knapsack_pro gem https://github.com/KnapsackPro/knapsack_pro-ruby#parallel_tests-with-knapsack_pro-on-single-ci-machine



来源:https://stackoverflow.com/questions/38209186/rails-5-rspec-environment-data-not-found-in-the-schema

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!