- 1. Як це зробити?
- 2. Висновок
У процесі розробки проекту на Django ми можемо зіткнутися з неприємною ситуацією, коли деякі пакети та модулі були видалені і, відповідно, моделі цих пакетів більше не використовувалися. Але в той же час сквош міграцій додатків не дозволяє видалити ці пакети, оскільки міграції мають багато циклічних залежностей. В результаті, видалення непотрібних пакетів стає досить складним завданням. Оскільки дозвіл таких залежностей стає нетривіальним завданням. Для мене таким неприємним пакетом був Django CKEditor, який був майже скрізь. У результаті цей пакет через міграції досить довго залишався у списку requirements.txt, хоча на сайті взагалі не використовувався.
Щоб позбавитися таких залежностей міграцій, потрібно видалити всі міграції, при цьому не видаляючи контент, створений цими міграціями. А потім створити нову початкову міграцію і застосувати її до бази даних без внесення нових змін до структури бази даних.
Як це зробити?
- Повернути всі міграції до нульового стану з параметром fake. Це означає, що інформація про міграцію буде видалена, але вміст не зміниться.
python manage.py мігрувати програму нуль --fake
- Видалити файли міграції з репозиторію
git rm "додаток/міграції/*"
- Створіть новий файл міграції
Додаток python manage.py makemigrations
- Запустіть нову міграцію з параметром fake, щоб додати інформацію про міграцію до бази даних, але не змінювати структуру бази даних.
python manage.py мігрувати програму --fake
Висновок
Уважно застосовуйте цей підхід до налаштування міграцій та краще створіть нову міграцію на тестовому сервері, щоб переконатися, що ви все робите правильно та база даних не зламається.
При цьому на тестовому сервері можна створити нову міграцію та додати її до репозиторію git.
Потім на робочому сервері потрібно буде зробити наступне.
python manage.py migrate app zero --fake git pull python manage.py migrate app --fake
Для Django я рекомендую Timeweb VDS-сервер .