2016-07-05 3 views
31

После обновления приложения Rails для Rails 5, выполнение тестов RSpec дает мне следующую ошибку: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 here.

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

+0

Вообще: это ужасное, более инженерия, чрезмерно сложные изменения.'env RAILS_ENV = {{whatever}} bin/rake db: migrate spec' используется для работы просто отлично – Barry

ответ

30

Нового 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) 
) 
+24

Если вы используете' database_cleaner', и эта ошибка продолжает появляться, измените конфигурацию на 'DatabaseCleaner.clean_with: truncation, за исключением: % w (ar_internal_metadata) '- https://github.com/DatabaseCleaner/database_cleaner/issues/445 – max

+0

omg, решение db_cleaner работает! : P не знал, что env был установлен в этой таблице. – Frexuz

5

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

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

2

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

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

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

7

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

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

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

  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 исчез.

1

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

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