Rails 5, Rspec: данные среды, не найденные в схеме
После обновления Rails-приложения до Rails 5 запуск RSpec-тестов дает мне следующую ошибку:
rails aborted!
ActiveRecord::NoEnvironmentInSchemaError:
Environment data not found in the schema. To resolve this issue, run:
bin/rails db:environment:set RAILS_ENV=test
Однако, bin
не существует, и я не могу сгенерировать его с помощью bundle binstubs rails
или с rake rails:update:bin
.
Я также пробовал:
rails db:environment:set RAILS_ENV=test
rake db:environment:set RAILS_ENV=test
Существует проблема, связанная с Github здесь.
Как я могу устранить эту ошибку?
Ответы
Ответ 1
Команда New Rails 5 для генерации binstubs:
rails app:update:bin
Позволяет мне запустить решение по ошибке:
bin/rails db:environment:set RAILS_ENV=test
Совет от комментария @max: если вы используете database_cleaner
, и эта ошибка продолжает появляться, измените конфигурацию на:
DatabaseCleaner.clean_with(
:truncation,
except: %w(ar_internal_metadata)
)
Ответ 2
исправить jenkins перед тем, как вы отбрасываете базу данных, вы должны выполнить db:environment:set
с помощью || true
, поэтому команда не прерывается:
bin/rails db:environment:set RAILS_ENV=test || true
Ответ 3
Для меня за этой ошибкой последовала аналогичная просьба о миграции.
Это сделал трюк: rails db:migrate RAILS_ENV=test
Ответ 4
Все вышеприведенные ответы верны, однако, если вы находитесь в более уникальном проекте, таком как разработка движка rails с концепцией схемы (хакер, я знаю), и по какой-то причине ваша миграция не удалась, вы можете перезапустить это без проверки, которая выбрасывает это исключение. Пример:
rake environment db:{drop,create,migrate} DISABLE_DATABASE_ENVIRONMENT_CHECK=1
Ответ 5
Для меня я должен был сделать смесь вещей:
bin/rails db:environment:set RAILS_ENV=test
bin/rails db:migrate RAILS_ENV=test
Это заставило бы все работать, и затем я должен был пересмотреть свои миграции, я добавил нуль: false в отношения, и это добавило ошибку, миграция была отменена и не завершилась
Ответ 6
Мне пришлось отбросить мою базу данных для тестирования и снова создать ее:
-
psql
-
DROP DATABASE your_db_name_test;
-
bundle exec rake db:create RAILS_ENV=test
После этого предупреждение bin/rails db:environment:set RAILS_ENV=test
исчезло.
Ответ 7
Если вы столкнулись с этой ошибкой при использовании georallel_tests, вам нужно выполнить команду ниже для каждой БД. Просто увеличьте 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
Это помогло мне решить проблему при тестировании параллельных тестов с гемом knapsack_pro https://github.com/KnapsackPro/knapsack_pro-ruby#parallel_tests-with-knapsack_pro-on-single-ci-machine