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

Почему я попросил запустить "rake db: migrate RAILS_ENV = test"?

В Rails 4.0.0.rc1, Ruby 2.0.0, после запуска миграции, я вижу следующую ошибку, когда пытаюсь запустить тест через rspec:

/Users/peeja/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc1/lib/active_record/migration.rb:376:in `check_pending! ': Миграции находятся на рассмотрении; run 'rake db: migrate RAILS_ENV = test 'для решения этой проблемы. (ActiveRecord:: PendingMigrationError)

Это не кажется правильным. Никто не переносит свою тестовую базу данных, не так ли? Они db:test:prepare, что, если честно, я забыл сделать. Поэтому я запускаю rake db:test:prepare и снова запускаю команду rspec... и вижу ту же ошибку.

Если я на самом деле rake db:migrate RAILS_ENV=test, ошибка действительно исчезает.

Что происходит? Является ли это новым в Rails 4?

4b9b3361

Ответ 1

В Rails 4.1 задачи rake db:test:* устарели. Вместо этого ваш (test|spec)_helper.rb должен включать:

ActiveRecord::Migration.maintain_test_schema!

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

Ответ 2

Похоже, rake test:prepare работает, не уверен, что теперь делает db:test:prepare.

Ответ 3

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

  • добавьте ActiveRecord::Migration.maintain_test_schema! в начало файла test_helper.rb.
  • rake test:prepare
  • rake db:migrate
  • rake db:migrate RAILS_ENV=test

Затем, когда я запускаю bundle exec rake test, я получаю чистые результаты каждый раз без ожидающих миграции. (Это то, что я делаю сразу после создания эшафота в первый раз). Кто-то может исправить меня, если вы точно знаете, что один из этих шагов абсолютно не нужен, но я уверен, что он работает каждый раз.

Ответ 4

Вы также можете попробовать

rake db:migrate RAILS_ENV=test

который работает как

db:test:prepare

делает:)

Ответ 5

Вы можете попробовать установить переменную команду BEFORE, например. Это утверждение решило мою проблему:

RAILS_ENV=test rake db:migrate

Ответ 6

Я нашел, что у меня есть эта проблема при использовании chruby для управления моими рубиновыми версиями. Rails вызывает bin/rails db:test:prepare через системную команду. Это не использует chrubys $PATH env var, поэтому он работает как независимо от системного рубина и не работает из-за недостающих драгоценных камней. К сожалению, в настоящее время у меня нет хорошего решения.