Рубрики
Без рубрики

Hidden Django Anti-Pattern предотвращает вашу ROD Roldback

Картина сцена: это 11 вечера и производство падает. Стресс Вы собираетесь откатиться к последнему ходу … Теги с Django, Codequality, Python, WebDev.

Картина сцена: это 11 вечера и производство падает. Стресс Вы собираетесь откатиться к последнему хорошему выпуску. Все, что вам нужно, это обратить вспять миграции базы данных, а затем развернуть и … Подожди, что?

$ python manage.py migrate hounds 0002
Operations to perform:
  Target specific migration: 0002_auto, from hounds
Running migrations:
  Rendering model states... DONE
  Unapplying hounds.0003_auto...Traceback (most recent call last):
django.db.migrations.exceptions.IrreversibleError: Operation  in hounds.0003_auto is not reversible

Миграции вперед и назад

Данные Django Migrations являются двумя участниками: вперед и назад, но причина этой неудачной миграции – это … по причинам … Разработка только добавлена только вперед обработчик:

# 0003_auto.py
def forwards(apps, schema_editor): 
    ...

class Migration(migrations.Migration):
    dependencies = [("cases", "0009_auto_20200320_1210")]
    operations = [migrations.RunPython(forwards)]

Django требует вперед, но назад технически необязательно. Хотя вышеизложенное действительно, ниже бесконечно лучше:

# 0003_auto.py
def forwards(apps, schema_editor): 
    ...

def backwards(apps, schema_editor):
    ...

class Migration(migrations.Migration):
    dependencies = [("cases", "0009_auto_20200320_1210")]
    operations = [migrations.RunPython(forwards, backwards)]

Итак, назад это технически Необязательно то же самое, что ношение парашюта во время прыжки с парашютом является необязательным: достаточно времени, когда вы в конечном итоге попадут на землю. Жесткий. Действительно, если вы хотите, чтобы вариант отказаться от вашего производственного сайта, то нет, назад не является обязательным. Опущение назад означает, что у вас есть только опция прокат вперед , который немного больше сложно по сравнению с безопасным возвратом к высвобождению Мы знать работает.

Исправление тоже очень простое: просто указав Миграция. Munpython.noop может быть достаточно. Как подразумевает название, Django будет ничего не делай Для обратного, просто пропустите миграцию данных, не бросая IrrooversibleError :

# 0003_auto.py
class Migration(migrations.Migration):
    dependencies = [("cases", "0009_auto_20200320_1210")]
    operations = [migrations.RunPython(forwards, migrations.RunPython.noop)]

Так что на практике следуйте этим советам:

Есть ли у вашей кодовой базы IrrooversibleErr ждет, чтобы произойти?

Со временем легко проскользнуть в вашей кодовой базе. У вас может быть необратимая миграция в вашей кодовой базе. Я могу проверить это для вас в django.doctor или может Просмотрите свой GitHUB PRS :

Или попробуйте Рефакторы Django Challenges Отказ

Оригинал: “https://dev.to/djangodoctor/the-hidden-django-anti-pattern-preventing-your-prod-rollback-fjd”