20150924

Django 1.8 마이그레이션 경험

Django 1.6 → 1.8 장기 지원버전으로 올리는 작업 했다. 기록.

먼저 1.7로 올리는게 현실적이라 해서 1.7 거쳐 1.8로 감. 가장 큰 변화는 migrations 시스템. south 안 쓰고 django 공식 migrations 씀.

기존 south migrations는 전부 날리고 (실제 스키마는 유지한 채로), 새로 makemigrations 초기 마이그레이션 생성. prod DB에는 migrate --fake-initial 로 마이그레이션 상태만 기록해두는 방식.

# south migration 제거
rm -rf */migrations/

# 새 migrations 생성
python manage.py makemigrations app1 app2 app3

# prod: 실제 DB는 이미 스키마가 맞으니 fake로
python manage.py migrate --fake-initial

걸린 것들:

1. {% url %} 태그의 quote. 1.5부터 quote 필요했던거 1.7/1.8에서 확정. 레거시 템플릿 많이 수정.

2. TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS 등 개별 설정이 TEMPLATES 배열로 통합. 1.8 새 포맷:

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [...]
    },
}]

3. ModelFormfields, exclude 미지정 시 에러. 이전엔 경고만.

4. SubfieldBase deprecation. to_python / from_db_value 따로 구현해야 됨. 커스텀 필드 몇 개 리팩토링.

1.8 은 LTS라 당분간 안심. 다음은 Python 3 이관이 숙제인데 legacy dependency 몇 개 때문에 미루는 중. 2015년에 2.x 쓰는게 좀 부끄럽기도 하고...

Django 1.8 마이그레이션 경험

Django 1.6 → 1.8 장기 지원버전으로 올리는 작업 했다. 기록.

먼저 1.7로 올리는게 현실적이라 해서 1.7 거쳐 1.8로 감. 가장 큰 변화는 migrations 시스템. south 안 쓰고 django 공식 migrations 씀.

기존 south migrations는 전부 날리고 (실제 스키마는 유지한 채로), 새로 makemigrations 초기 마이그레이션 생성. prod DB에는 migrate --fake-initial 로 마이그레이션 상태만 기록해두는 방식.

# south migration 제거
rm -rf */migrations/

# 새 migrations 생성
python manage.py makemigrations app1 app2 app3

# prod: 실제 DB는 이미 스키마가 맞으니 fake로
python manage.py migrate --fake-initial

걸린 것들:

1. {% url %} 태그의 quote. 1.5부터 quote 필요했던거 1.7/1.8에서 확정. 레거시 템플릿 많이 수정.

2. TEMPLATE_DIRS, TEMPLATE_CONTEXT_PROCESSORS 등 개별 설정이 TEMPLATES 배열로 통합. 1.8 새 포맷:

TEMPLATES = [{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [...]
    },
}]

3. ModelFormfields, exclude 미지정 시 에러. 이전엔 경고만.

4. SubfieldBase deprecation. to_python / from_db_value 따로 구현해야 됨. 커스텀 필드 몇 개 리팩토링.

1.8 은 LTS라 당분간 안심. 다음은 Python 3 이관이 숙제인데 legacy dependency 몇 개 때문에 미루는 중. 2015년에 2.x 쓰는게 좀 부끄럽기도 하고...