워크시트

InconsistentMigrationHistory 이슈 발생시 해결방법

Simon Yoon 2022. 6. 19. 15:41

django 프로젝트를 진행하면서 database와 migration시 InconsistentMigrationHistory 에러가 발생하는 경우가 있습니다.

바로 아래의 사진과 같은 상황이 발생하는 것인데요.

<에러 메세지 확인하기>

이 에러 메세지를 잘 읽어보면, (제 에러 메세지와 꼭 동일하지 않을 수 있습니다! 직접 이슈 발생 이유가 무엇인지 확인할 필요가 있습니다.)

django.db.migrations.exceptions.InconsistentMigrationHistory 라고 하면서 migration 히스토리 상에서 어떤 충돌이 발생한 것임을 알 수 있습니다.

더 자세히보면 Migration admin.0001_initial이 accounts라고 하는 앱보다 먼저 applied 되면서 문제가 발생했다고 하는데요.

사실상 dependency 문제가 발생함으로 인해서 계속해서 마이그레이션이 안되는 상황이 발생하고 있는 것 같습니다.

 

<일단 이슈 해결 전, database를 사용하면서 주의할 점>

일단 이러한 문제가 발생하기 전에 주의해야할 점은,

아래의 스택오버플로 페이지 답변에도 나와있지만 database가 잘 작동하고 migration system이 잘 작동하고 있는한 database를 drop하거나 migrations된 이후로 migrations를 절대 삭제하지 않아야 합니다.

그러므로 일단 프로젝트 파일에서 migrations는 최대한 건드리지 마시고 진행하시는 편이 앞으로도 좋을 것 같습니다. 또한 단순히 migrations를 전부 지운다고 해결되는 문제가 아니기 때문에 주의가 필요합니다.

 

<문제 해결 방법>

1. 만약 혼자 작업한다면 아래의 DB 자체를 날려버리는 방법을 고려해보세요.

  • 모든 migrations를 삭제하고 console에서 python -m manage.py makemigrations를 입력해서 새로운 상태로 만들어 버립니다. 일단 이렇게 하는 이유는 dependencies와 inconsistencies를 해결하기 위함입니다.
  • 삭제하고 난 후에는 database 전체를 drop합니다. 이렇게 해야 불일치 문제를 해결할 수 있습니다.
  • python -m manage.py migrate를 입력해서 database schema를 재생성해줍니다.

 

2. 만약에 database를 날리지 않아야 한다면 아래의 방법을 시도해 볼 수 있을 것입니다.

  • 여러 명이 동시에 같은 프로젝트에서 작업을 할 때 주로 발생하기 때문에 makemigrations --merge를 이용해서 해결하거나, 다른 사람의 migrations로 롤백할 수도 있을 것입니다.
  • 추가 내용

3. 저의 경우에는 admin과 accounts라는 앱이 충돌을 일으켰기 때문에 settings.py를 수정해줘서 해결했습니다.

  • 먼저 settings.py에서 'django.contrib.admin'을 잠시 주석 처리해주고,

  • admin을 건드렸기 때문에 urls.py에 들어가서 admin path도 잠시 주석처리 해줬습니다.

만약에 urls.py를 바꿔주지 않으면 LookupError가 발생합니다.

  • 이렇게 한 이후에 console에서 python manage.py migrate를 실행해주시고 다시 주석을 해제해주시면 됩니다.

꼭 이러한 방법으로 해결되지는 않을 수도 있지만 대부분은 해결할 수 있을 것이라 생각합니다. 일단 django project를 진행하면서 database가 잘 작동하는한 최대한 건드리지 않는 편이 좋을 것 같습니다.

아래의 사이트를 참고하셔서 더 자세한 내용을 확인하실 수 있습니다.

https://stackoverflow.com/questions/44651760/django-db-migrations-exceptions-inconsistentmigrationhistory

 

django.db.migrations.exceptions.InconsistentMigrationHistory

When I run python manage.py migrate on my Django project, I get the following error: Traceback (most recent call last): File "manage.py", line 22, in <module> execute_from_command_line(sys.a...

stackoverflow.com

https://www.jgahn.com/archive/post/40/

 

Django에서 migrations error 발생할 때 migration 초기화하기 - 잡동사니 아카이브

Django에서 migrations error 발생할 때 migration 초기화하기 April 7, 2020   /   4 mins read   /   Python Django Error 이 문서는 Stack overflow의 'django.db.migrations.exceptions.InconsistentMigrationHistory'와 Simpleisbetterthancomplex

www.jgahn.com