2015-06-04 11 views
3

Джанго документация говорит, что мы могли бы удалить миграции после давя их:Как удалить миграции django после их раздавливания?

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

Здесь удаляет средство, удаляя только файлы миграции или записи в таблице django_migrations?

Вот некоторый фон: у меня есть только машина для разработки, поэтому всего одна база кода. После раздачи некоторых миграций, которые я уже применял, я удалил файлы и записи базы данных. Протестировано, если это нормально, выполнив миграцию, он ничего не нашел. Итак, все выглядело хорошо. На следующий день мне пришлось что-то изменить и сделать миграцию. Когда я попытался выполнить миграцию, он попытался применить сжатую миграцию (которая была применена частично по частям перед раздачей). Итак, мне пришлось вернуться и заново создать записи в таблице django_migrations. Поэтому мне кажется, что я должен был хранить записи в базе данных. Я пытаюсь убедиться, прежде чем снова испортить что-нибудь, и понять, почему это выглядело хорошо, и затем попытался применить сжатую миграцию.

ответ

3

Сжатые миграции никогда не отмечены как примененные, которые будут зафиксированы в 1.8.3 (см. #24628).

шаги, чтобы удалить старые миграции являются:

  1. Убедитесь, что все замененные миграции применяются (или ни один из них).
  2. Удалите старые файлы миграции, удалите атрибут replaces из сжатых миграций.
  3. (Обходной путь) Запуск ./manage.py migrate <app_label> <squashed_migration> --fake.

Последний шаг не потребуется, когда прибывает 1.8.3.

0

Я не эксперт и любыми средствами, но я просто раздавил мои миграции, и в конечном итоге делает следующее:

Ран этот запрос удалены старые миграции (раздавленных)

DELETE FROM south_migrationhistory; 

Run эта команда управления, чтобы удалить пунктирные Миграции

./manage.py migrate --fake --delete-ghost-migrations 

Django 1.7 также имеет squashmigrations

+0

Я должен был упомянуть, что использовал Django 1.8, так что это не южная миграция. Спасибо за ответ, хотя. – mehmet

1

Конвертировать сжатые миграции стало легче, так как вопрос был опубликован. Я опубликовал small sample project, в котором показано, как выполнять сквош-миграции с помощью круговых зависимостей, а также показано, как преобразовать сжатую миграцию в обычную миграцию после того, как все установки мигрировали мимо сквош-точки.

Как Django documentation говорит:

Вы должны затем перейти на раздавленный миграцию к нормальной миграции путем:

  • Удаление всех файлов миграции он заменяет.
  • Обновление всех миграций, зависящих от удаленных миграций, зависит от сжатой миграции.
  • Удаление атрибута замещения в классе миграции сжатой миграции (так Django сообщает, что это сжатая миграция).