나의 재물운? 연애운은?
AI가 봐주는 내 사주팔자 - 운세박사
로컬 개발 환경과 우분투 개발 환경에서 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
삭제 후 migrate를 하면 더 이상 migrate를 할 게 없다고 뜨면서
완벽하게 로컬과 동기화된 서버의 migrations들의 상태를 볼 수 있음
결론
DB를 공유할 경우,
Makemigrations는 꼭 한 쪽에서만 해야함
여러 곳에서 하면 절대로 안됨.
여러 곳에서 했을 경우, 적용이 되지 않은 migrations 파일들을 모두 삭제해주면
다시 잘 작동됨.
나의 재물운? 연애운은?
AI가 봐주는 내 사주팔자 - 운세박사