rails 3.1 db: тест: подготовка и проблема "отложенных миграций" - PullRequest
3 голосов
/ 14 июля 2011

Недавний переход на Rails 3.1.0.rc4, и у меня возникают проблемы с запуском наших сборок CI.Это сводится к следующему упрощенному случаю:

-bash-3.2$ echo $RAILS_ENV
test
-bash-3.2$ bundle exec rake db:drop db:create db:test:prepare
You have 21 pending migrations:
  20100628174219 InitialSchema
  20100706175001 AddCompanyToClassifieds
  20100720132917 CartItemActionMigration
  20100811192506 AddJobTitleToDirectoryListings
  ...

Если я заменю эту команду на bundle exec rake db:drop db:create db:migrate db:test:prepare, она будет работать нормально.

При копании глубже ядро ​​db:test:prepare задача имеет db:abort_if_pending_migrationsв качестве предварительного условия.

Теперь я просто упускаю что-то очевидное или это совершенно бессмысленно?Запуск db:test:prepare (в стандартном случае) вызывает db:schema:load, который выполняет schema.rb - весь смысл которого заключается в загрузке схемы без выполнения всех миграций.Не запустившись, если не выполнялись все миграции (таким образом, db:migrate предшествует db:test:prepare), разве это не делает себя совершенно бесполезным?

Полагаю, я могу добавить дополнительный db:migrate к своемуПроцесс сборки CI, но я хотел бы знать, что я делаю неправильно.

1 Ответ

0 голосов
/ 14 июля 2011

Я считаю, что db:test:prepare не предназначен для работы в среде TEST (в противном случае вы можете просто запустить db:schema:load самостоятельно).Обычно вы запускаете db:test:prepare в среде разработки.В этом случае проверка ожидающих миграций весьма полезна (вы узнаете, совершали ли ваши коллеги какие-либо новые миграции, прежде чем запускать и проваливать несколько тестов).Поскольку запуск тестов запускает db:test:prepare в любом случае , вам редко нужно запускать его вручную (конечно, не для ваших сборок CI).Пропустить звонок на db:test:prepare.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...