Почему я попросил запустить "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?
Ответы
Ответ 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, поэтому он работает как независимо от системного рубина и не работает из-за недостающих драгоценных камней. К сожалению, в настоящее время у меня нет хорошего решения.