Подтвердить что ты не робот

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 здесь.

Как я могу устранить эту ошибку?

4b9b3361

Ответ 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