Log for everything - Day

Django 프로젝트 Heroku에 릴리즈하기

|

기존 Django 프로젝트 Heroku에 릴리즈

Heroku CLI 설치

brew install heroku

gunicorn을 추가

pip3 install gunicorn

gunicorn 설정시 폴더구조는
메인 -
       |- 프로젝트
       |- 다른 앱
폴더 구조가 다르면 gunicorn module 임포트를 적절히 수정해 줘야 한다.

Procfile 추가

프로젝트 루트에 Procfile을 추가하고 다음 내용을 저장한다.
web: gunicorn myproject.wsgi --log-file -

runtime.txt 추가

프로젝트 루트에 runtime.txt을 추가하고 다음 내용을 저장한다. (파이썬 3.# 일 경우)
python-3.6.1

dj-database-url 추가

pip3 install dj-database-url

이후 프로젝트의 settings.py파일에

import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

를 추가한다.

whitenoise 추가

장고는 기본적으로 프로덕션에서 스태틱 파일을 제공하지 않는다.
whitenoise는 개발 환경 그대로 스태틱 파일을 제공하게 해준다.
pip install whitenoise

settings.py에 다음 내용을 추가한다.

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

wsgi.py에 다음 내용을 추가한다.

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

requirements.txt 생성

pip freeze > requirements.txt를 입력하여 사용된 패키지를 추출한다.

ALLOWED Host 추가

settings.py에서 ALLOWED_HOSTS = ['*']를 추가한다.

추가사항

DEBUG=False 일때 Whitenoise와 Heroku의 충돌이 있다.
해결방법은 Django를 이용한 건물주 평판 조회 서비스 제작 (5) - Heroku 업로드 여기서 확인

Heroku에 로그인

heroku login

Heroku 앱 생성

heroku create

heroku create
Creating app... done, ⬢ calm-basin-17299
https://calm-basin-17299.herokuapp.com/ | https://git.heroku.com/calm-basin-17299.git

Git remote heroku added

Heroku를 git remote로 추가

git remote add heroku https://git.heroku.com/calm-basin-17299.git

db가 생성되어 있지 않다면 생성

heroku run python manage.py migrate
간혹 dev와 production 환경의 db가 다를 경우 db 생성이 되지 않은 상태라 push가 제대로 되지 않는다.

슈퍼유저 생성

heroku run python manage.py createsuperuser

commit하고 Heroku에 push

git push heroku master

만약 matpolib을 쓴다면… 헤로쿠와 충돌이 일어난다

import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt, mpld3 전에 추가한다.

Comments