Почему меня просят запустить "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 или нет.


выглядит так:rake test:prepare работает, не уверен, что db:test:prepare сейчас.


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

  1. добавить ActiveRecord::Migration.maintain_test_schema! в верхней части test_helper.файл rb.
  2. rake test:prepare
  3. rake db:migrate
  4. 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