it-roy-ru.com

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

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

47
steel

Новая команда 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)
)
56
steel

исправление для jenkins перед удалением базы данных, вы должны выполнить db:environment:set с || true, чтобы команда не прерывала:

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

Для меня за этой ошибкой последовала похожая ошибка с просьбой о миграции.

Это сделало трюк: Rails db:migrate Rails_ENV=test

7
Mirror318

Все приведенные выше ответы верны, однако, если вы находитесь в более уникальном проекте, таком как разработка движка Rails с концепцией схемы (хак, я знаю), и ваша миграция по какой-то причине не удалась , вы можете перезапустить его без проверки, которая выдает это исключение. Пример:

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

5
Cole Jurden

Для меня я должен был сделать смесь вещей:

bin/Rails db:environment:set Rails_ENV=test
bin/Rails db:migrate Rails_ENV=test

Это заставило бы все работать, и затем я должен был пересмотреть свои миграции, я добавил нуль: false в отношения, и это добавило ошибку, миграция была отменена и не завершилась

3
Sergio Ocón Cárdenas

Мне пришлось отказаться от своей базы данных для испытаний и создать ее снова:

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

После этого предупреждение bin/Rails db:environment:set Rails_ENV=test исчезло.

2
Evmorov