Почему меня просят запустить "rake db: migrate RAILS ENV=test"?
На Рельсы 4.0.0.rc1, Ruby 2.0.0, после запуска миграции, я вижу следующую ошибку при попытке запустить тест через rspec
:
/пользователи/peeja/.rbenv/версии/2.0.0-Р0/lib в/Рубин/драгоценные камни/2.0.0/драгоценные камни/и ActiveRecord-4.0.0.rc1/lib/active_record / миграция.rb: 376: in `check_pending!': Миграция отложена; выполнить ' rake db: migrate RAILS_ENV=test ' для решения этой проблемы. (ActiveRecord:: PendingMigrationError)
Это не кажется правильным. Никто переносит свою тестовую базу данных, не так ли? Они!--1--> Это, что, честно говоря, я забыл сделать. Поэтому я бегу rake db:test:prepare
и запустить мой rspec
команда снова...и увидеть ту же ошибку.
если я на самом деле rake db:migrate RAILS_ENV=test
, ошибка действительно уходит.
что происходит? Это новое в Rails 4?
6 ответов
по состоянию на Rails 4.1,rake db:test:*
задачи являются устаревшими. Вместо (test|spec)_helper.rb
должны включать:
ActiveRecord::Migration.maintain_test_schema!
это означает, что ваша тестовая база данных будет получать правильную схему каждый раз при запуске тестов, независимо от того, запускаете ли вы их из задачи Rake или нет.
у меня все еще есть проблемы иногда в сортировке этой проблемы, когда я просто следую за ответом одного человека, поэтому я бросил пару вместе, чтобы получить лучшие результаты. Вот шаги, которые я предпринимаю, не уверен, какие из них не нужны, но в конце концов это работает.
- добавить
ActiveRecord::Migration.maintain_test_schema!
в верхней части test_helper.файл rb. rake test:prepare
rake db:migrate
rake db:migrate RAILS_ENV=test
тогда, когда я бегу bundle exec rake test
Я получаю чистые результаты каждый раз без ожидающие миграции. (Это то, что я делаю сразу после создания эшафота в первый раз). Кто-нибудь, не стесняйтесь поправлять меня, если вы точно знаете, что один из этих шагов абсолютно не нужен, Но именно так я убеждаюсь, что он работает каждый раз.
вы также можете попробовать
rake db:migrate RAILS_ENV=test
, который работает
db:test:prepare
делает:)
я обнаружил, что у меня есть эта проблема при использовании chruby
для управления моими версиями ruby. Рейлинги на звонки bin/rails db:test:prepare
через системную команду. Это не использует преимущества chrubys $PATH
env var, поэтому он работает как любой Рубин системы и терпит неудачу из-за отсутствия драгоценных камней. К сожалению, в настоящее время у меня нет хорошего решения для этого.
вы можете попробовать установить переменную перед командой, например. Это утверждение решило мою проблему:
RAILS_ENV=test rake db:migrate