В котором я означаю "повторно базироваться" в словаре, а не определении мерзавца...
У меня есть большой, длительный проект направляющих, который имеет приблизительно 250 миграций, это заставляет касание, громоздкое управлять всеми ими.
Тем не менее мне действительно нужна основа, от которой можно произвести чистку и восстановить мою базу данных при запущении тестов. Таким образом, данные, содержавшиеся в них, важны.
Делает у любого есть любые стратегии, говорят, выводя схему в заданной точке - архивирующий от всех старых миграций и начинающий заново с новыми миграциями.
Очевидно, я могу использовать грабли schema:dump - но действительно мне нужен способ, которым db:migrate загрузит схему сначала и затем запустит рабочую остальную часть миграций.
Я хотел бы продолжать использовать миграции, поскольку они очень полезны в разработке, однако, нет никакого способа, которым я возвращаюсь и редактирую миграцию с 2007, таким образом, кажется глупым сохранить его.
Как правило, вам не нужно очищать старые миграции. Если вы запускаете db: migrate с нуля (нет существующих db), Rails использует db / schema.rb для создания таблиц вместо запуска каждой миграции. В противном случае он выполняет только миграции, необходимые для обновления текущей схемы до последней.
Если вы все еще хотите объединить миграции до данной точки в одну, вы можете попробовать:
rake db: migrate VERSION = xxx
rake db: schema: dump
Убедитесь, что вы выбрали один из старых номеров версии миграции для новой агрегированной миграции; в противном случае Rails попытается применить эту миграцию на вашем производственном сервере (что приведет к стиранию ваших существующих данных, поскольку операторы create_table используют: force⇒true).
В любом случае, я бы не рекомендовал это делать, поскольку Rails обычно сам хорошо справляется с миграциями. Но если вы все же хотите, обязательно дважды проверьте все и попробуйте сначала локально, прежде чем вы рискуете потерять данные на своем производственном сервере.