2016-07-16 5 views
1

У меня есть приложение с 35 миграциями, которые требуют времени для запуска (например, перед тестированием), поэтому я хотел бы их сквош.Использование новой начальной миграции для сквош-миграции

Команда squashmigrations уменьшает операции с 99 до 88, но она все еще далека от оптимальной. Вероятно, это связано с тем, что у меня есть несколько операций RunPython, которые не позволяют Django оптимизировать другие операции. Все эти операции RunPython бесполезны в сжатой миграции, потому что база данных пуста. В Django 1.10 параметр elidable позволит пропустить их в этом случае, но все же остается много беспорядка.

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

Целесообразно использовать свежую начальную миграцию как раздавленный версии длинного списка миграций? Как бы Вы это сделали?

ответ

1

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

Я использовал этот трюк много раз, и он работает для меня.

Несколько мыслей:

  • иногда, сначала нужно создать миграции для одного из вашего местного применения, а затем для всех остальных;

  • Чтобы убедиться, что все в порядке, вы можете совершить свои миграции и выполнить резервное копирование на db, прежде чем вы запустите manage.py migrate с пустым db.

ПРИМЕЧАНИЕ: ускорить тесты можно попытаться запустить в тестах памяти и/или запускать тесты с SQLite, если его возможно.

+0

Спасибо! Как вы генерируете первоначальную миграцию? Вы перемещаете все текущие миграции в другую папку? – pintoch

+1

Обычно я просто удаляю миграцию папок под каждым из моих локальных приложений. Обычно я использую PostreSQL. поэтому в простейшем случае я запускаю это: 'dropdb dbname && createdb dbname && rm -rf some_application/migrations && python manage.py migrate' –

Смежные вопросы