[Django] Makemigration migrate 꼬였을 때

나의 재물운? 연애운은?

AI가 봐주는 내 사주팔자 - 운세박사

https://aifortunedoctor.com/

[Django] Makemigration migrate 꼬였을 때

영리치 0 2,578 2022.02.15 19:34

로컬 개발 환경과 우분투 개발 환경에서 DB를 공유할 때에

Makemigrations와 migrate가 꼬이는 경우가 있음

이런 경우는 로컬에서 Makemigrations를 해서 migrate 파일들을 생성하고

migrate를 통해 DB에 적용 후에

서버에서도 Makemigrations를 하여 새로운 migrate 파일들이 생성된 경우임

서버에서는 migrate가 안됨. 기존 migrate했던 것들과 충돌이 나기 때문임.


아래는 migrate 관련 오류가 나는 모습임. runserver 했을 때의 에러임

You have 6 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): chat, feed, user.

Run 'python manage.py migrate' to apply them.


아래는 충돌이 난, 즉 이상하게 Makemigrations을 또 해버린 쪽에서 migrate 하려고 하면 아래와 같은 오류가 남

CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0006_alter_user_is_register, 0006_merge_0005_auto_20220124_1733_0005_auto_20220124_1735 in user).

To fix them run 'python manage.py makemigrations --merge'



에러의 원인을 찾기 위해 아래와 같은 명령어로 migrations의 목록들을 봐야함


python manage.py showmigrations


admin

 [X] 0001_initial

 [X] 0002_logentry_remove_auto_add

 [X] 0003_logentry_add_action_flag_choices

auth

 [X] 0001_initial

 [X] 0002_alter_permission_name_max_length

 [X] 0003_alter_user_email_max_length

 [X] 0004_alter_user_username_opts

 [X] 0005_alter_user_last_login_null

 [X] 0006_require_contenttypes_0002

 [X] 0007_alter_validators_add_error_messages

 [X] 0008_alter_user_username_max_length

 [X] 0009_alter_user_last_name_max_length

 [X] 0010_alter_group_name_max_length

 [X] 0011_update_proxy_permissions

 [X] 0012_alter_user_first_name_max_length

chat

 [X] 0001_initial

 [X] 0002_auto_20220124_1735

 [ ] 0002_auto_20220124_1733

 [ ] 0003_merge_0002_auto_20220124_1733_0002_auto_20220124_1735

contenttypes

 [X] 0001_initial

 [X] 0002_remove_content_type_name

feed

 [X] 0001_initial

 [X] 0002_auto_20220124_1735

 [ ] 0002_auto_20220124_1733

 [ ] 0003_merge_0002_auto_20220124_1733_0002_auto_20220124_1735

logger

 [X] 0001_initial

 [X] 0002_pushlog_to

 [X] 0003_alter_phonelog_to

payment

 [X] 0001_initial

 [X] 0002_payment_user

raw

 [X] 0001_initial

 [X] 0002_party_owner

 [X] 0003_party_slug

 [X] 0004_alter_party_slug

 [X] 0005_auto_20210924_1130

 [X] 0006_auto_20211020_0953

result

 [X] 0001_initial

 [X] 0002_paint_user

 [X] 0003_paint_region_upp

 [X] 0004_resultcountry_occupation_region_num

 [X] 0005_auto_20211020_0953

 [X] 0006_resultlog

 [X] 0007_resultlog_country_geo_id

sessions

 [X] 0001_initial

user

 [X] 0001_initial

 [X] 0002_alter_user_phone

 [X] 0003_user_description

 [X] 0004_social_social_id

 [X] 0005_auto_20220124_1735

 [X] 0006_alter_user_is_register

 [ ] 0005_auto_20220124_1733

 [ ] 0006_merge_0005_auto_20220124_1733_0005_auto_20220124_1735

verifier

 [X] 0001_initial

 [X] 0002_alter_phoneverifier_phone





위에 X 표시가 된 것들은 DB에 반영이 된 것이고,

X 표시가 없는 것들은 DB에 반영이 안된 것임.




잘 돌아가고 있는 로컬에서는 아래와 같이 모든 migrations 파일들이 제대로 DB에 적용된 것을 볼 수 있음

admin

 [X] 0001_initial

 [X] 0002_logentry_remove_auto_add

 [X] 0003_logentry_add_action_flag_choices

auth

 [X] 0001_initial

 [X] 0002_alter_permission_name_max_length

 [X] 0003_alter_user_email_max_length

 [X] 0004_alter_user_username_opts

 [X] 0005_alter_user_last_login_null

 [X] 0006_require_contenttypes_0002

 [X] 0007_alter_validators_add_error_messages

 [X] 0008_alter_user_username_max_length

 [X] 0009_alter_user_last_name_max_length

 [X] 0010_alter_group_name_max_length

 [X] 0011_update_proxy_permissions

 [X] 0012_alter_user_first_name_max_length

chat

 [X] 0001_initial

 [X] 0002_auto_20220124_1735

contenttypes

 [X] 0001_initial

 [X] 0002_remove_content_type_name

feed

 [X] 0001_initial

 [X] 0002_auto_20220124_1735

logger

 [X] 0001_initial

 [X] 0002_pushlog_to

 [X] 0003_alter_phonelog_to

payment

 [X] 0001_initial

 [X] 0002_payment_user

raw

 [X] 0001_initial

 [X] 0002_party_owner

 [X] 0003_party_slug

 [X] 0004_alter_party_slug

 [X] 0005_auto_20210924_1130

 [X] 0006_auto_20211020_0953

result

 [X] 0001_initial

 [X] 0002_paint_user

 [X] 0003_paint_region_upp

 [X] 0004_resultcountry_occupation_region_num

 [X] 0005_auto_20211020_0953

 [X] 0006_resultlog

 [X] 0007_resultlog_country_geo_id

sessions

 [X] 0001_initial

user

 [X] 0001_initial

 [X] 0002_alter_user_phone

 [X] 0003_user_description

 [X] 0004_social_social_id

 [X] 0005_auto_20220124_1735

 [X] 0006_alter_user_is_register

verifier

 [X] 0001_initial

 [X] 0002_alter_phoneverifier_phone





이에 따라, 아래 명령어 처럼 적용이 안됨 migrations 파일들을 모두 삭제 후 migrate 해주면 잘 됨.

rm -rf 0002_auto_20220124_1733.py

rm -rf 0003_merge_0002_auto_20220124_1733_0002_auto_20220124_1735.py


0114884402a0d9a4558c1941c0b121b2_1644921203_3886.png
 



삭제 후 migrate를 하면 더 이상 migrate를 할 게 없다고 뜨면서

완벽하게 로컬과 동기화된 서버의 migrations들의 상태를 볼 수 있음




결론

DB를 공유할 경우,

Makemigrations는 꼭 한 쪽에서만 해야함

여러 곳에서 하면 절대로 안됨.

여러 곳에서 했을 경우, 적용이 되지 않은 migrations 파일들을 모두 삭제해주면

다시 잘 작동됨.







Comments

나의 재물운? 연애운은?

AI가 봐주는 내 사주팔자 - 운세박사

https://aifortunedoctor.com/

Category
실시간 인기글
난 아버지처럼 되지 않을래요
영리치
등록된 글이 없습니다.
Magazine
훈남/훈녀
 
 
 
상점
Facebook Twitter GooglePlus KakaoStory NaverBand