Переосновные миграции направляющих в длительном проекте

В котором я означаю "повторно базироваться" в словаре, а не определении мерзавца...

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

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

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

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

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

43
задан davidsmalley 27 July 2010 в 12:22
поделиться

1 ответ

Как правило, вам не нужно очищать старые миграции. Если вы запускаете db: migrate с нуля (нет существующих db), Rails использует db / schema.rb для создания таблиц вместо запуска каждой миграции. В противном случае он выполняет только миграции, необходимые для обновления текущей схемы до последней.

Если вы все еще хотите объединить миграции до данной точки в одну, вы можете попробовать:

  • выполнить миграцию с нуля до целевой схемы, используя rake db: migrate VERSION = xxx
  • выгрузите схему, используя rake db: schema: dump
  • , удалите миграции с самого начала до версии xxx и создайте одну новую миграцию, используя содержимое db / schema.rb (поместите операторы create_table и add_index в self .up метод новой миграции).

Убедитесь, что вы выбрали один из старых номеров версии миграции для новой агрегированной миграции; в противном случае Rails попытается применить эту миграцию на вашем производственном сервере (что приведет к стиранию ваших существующих данных, поскольку операторы create_table используют: force⇒true).

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

50
ответ дан 26 November 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: