1. mysql와 django 연동하기
1) settings.py 에서 설정해준다.
- sqlite -> mysql
- INSTALLED_APPS
2) workbench에서 EER 다이어그램을 설계한다.
3) mysql 와 django를 연동하여 makemigrations, migrate를 해준다.
models.py
serializers.py
views.py
urls.py
user에서 token 처리, 이외는 생략
2. Heroku와 Django 연동하기
먼저 MySQL을 사용하고 있기에, Heroku에서 지원하는 cleardb를 이용해야 한다.
Heroku에서 cleardb까지 생성하는 것은
위를 참고하면 생성할 수 있을 것이다.
문제점 1) EER 다이어그램 생성했는데, 어떻게 Heroku에 넣지?
해결하는데 시간이 많이 걸렸다😂
EER Diagram을 이용하여, 테이블을 연결한 후, Heroku 스키마에 추가를 해야한다.
하지만, Forward 하는 순간,
이와 같은 Error 1044가 발생한다.
접근 권한 문제인가 라는 생각에 mysql(명령프롬프트)에서
mysql >> grant all privileges on gdpdb.* to 'bfc96653faaba1'@'127.0.0.1' identified by 'dfc6fc80' with grant option;
사용자 권한까지 바꾸었지만 해결되지 않았다.
또한, Heroku에서 접근권한에도 문제가 없었다.
mysql 기본 스키마에서 user 테이블에 유저를 생성해서 접근하려고 하지만 되지가 않는다. (이래서 Error 1044가 뜬 것 같다.)
해결 방법
settings 파일 그대로 상속받아서 DATABAES 옵션만 오버라이드한다. (이럴 경우, 마이그레이션 하면 DB정보만 원격지로 바꿔서 마이그레이션을 할 수 있다.)
1) settings_heroku.py 생성
Django로 서버배포할 때 로컬이랑 테스트, QA, 상용 환경 분리할 때 이러한 식으로 파일만들어서 환경 다르게 할 수 있다.
(이럴 경우 사고칠 일이 거의 없다.)
2) asgi.py
gdproject.settings_heroku, DB 지정
3) wsgi.py
gdproject.settings_heroku, DB 지정
1), 2), 3)에 관하여
기존에 사용하던 settings 파일의 database 설정은 local에서 사용하던 sqlite 파일을 바라보고 있다.
새로 작성된 settings_heroku.py
의 database 설정은 cleardb의 접속정보를 포함하고 있다.
그렇기 때문에 배포된 환경에서는 서버를 실행할 때 게이트웨이 인터페이스 파일을 참조할텐대 배포환경에서 원격DB 정보를 담고있는 settings_heroku
파일을 바라봐야한다.
Heroku에서 작성한 Procfile을 통해 서버를 실행시킬 텐대, 그 파일 안에서 gdproject.wsgi
를 바라보고 있다.
asgi.py까지 건드릴 필요는 없지만, 나중에 사용할 것 같아 wsgi.py와 동일하게 작업하였다.
실제로 Procfile을 타고 와서 실행되는 부분은
Procfile -> gdproject.wsgi -> runserver with settings_heroku 이다.
4) 원격지로 보낸다.
heroku 스키마, Tables에 있는 Table들을 모두 drop 후 실행해야 한다.
python manage.py migrate --settings=gdproject.settings_heroku
실행할 시, heroku_d2195... tables에 table들이 추가된다.
완료시, 이와 같이 된다.
settings.py에서 데이터베이스 설정이 로컬에 있는 sqlite를 바라보게 된다.
설정에 따라 바라보는 DB가 다른것이다.
Heroku를 사용하던 안하던 바라보고 있는 DB는 설정에 따라 달라진다.
새로 작성한 settings_heroku.py의 DB설정은 Heroku, ClearDB를 바라보고 있다.
Heroku에서 Profile에 작성된 스크립트를 기반으로 서버를 실행시켜준다.
작성된 내용대로라면 wsgi.py를 통해 서버를 실행한다.
wsgi.py를 타고 들어오면 서버를 구동하는 커맨드가 작성되고 배포환경에서는 ClearDB를 바라보고 싶으니 설정파일 옵션에 settings_heroku를 넣어서 실행시켜주고 있다.
workbench에 생성된 스키마를 마이그레이션을 해준다.
실행을 하면 정상적으로 화면이 잘 나온다.
python manage.py migrate
python manage.py runserver
이제 heroku에 적용한다.
git으로 push가 다된 상태에서
$ heroku login # 로그인
$ heroku create projectname # heroku에 프로젝트 생성
$ heroku git:remote -a AppName # 이미 프로젝트를 생성했다면 remote한다.
수정된 내용을 헤로쿠로 보낼 때에는
$ git add .
$ git commit -m "메모"
$ git push heroku master
한다.
만약 heroku master가 되지 않는다면,
remote rejected error가 발생했을 때,
heroku buildpacks:clear
: 빌드 초기화 한다.
위와 같은 오류가 해결되지 않는다면, conflict 관련 오류일 수도 있다.
sourcetree에서 찾아본다.
이럴 경우, conflict 관련 오류로 인하여 heroku에서 push가 안되었기에, 이전 변경한 내용들이 heroku 서버에 추가되지 않았다.
그럼에 위 사진에 보이는 것처럼 오류부분을 수정한 후, git push origin master을 입력할 시 잘 실행된다.
이제 bash에서 입력해준다.
$ heroku run python manage.py migrate # heroku 서버로 옮겼기 때문에 database를 등록해준다.
$ heroku run python manage.py createsuperuser # superuser 생성한다.
$ heroku ps:scale web=1 # 프로젝트를 킬 때 사용한다.
$ heroku ps:scale web=0 # 프로젝트를 끌 때 사용한다.
$ heroku logs --tail # 정상적으로 작동하는지 확인하고 싶으면 로그를 보면 된다. --tail을 붙여 최근 로그부터 볼 수 있다.
$ heroku open # Django나 Flask와 같은 파이썬 웹 프레임워크를 이용하여 사이트를 만들었다면 현재 명령어로 사이트를 열 수 있다.
$ heroku ps # 헤로쿠 cli에서 호스팅과 관련된 명령어는 heroku ps로 입력시 정보가 뜬다. 무료 시간이 몇 시간 남았는지, 이 앱에서 얼마나 시간을 썼는지, 앱이 실행 중인지 여러 정보가 뜬다. 처음 실행 시에는 No dynos on (프로젝트 명)이라고 뜬다.
위 입력 완료시,
Api Root – Django REST framework 사이트
(지금은 종료했습니다!)
방문하면
가상서버가 켜진다.😁
참고 자료
'공부 및 활동 > heroku, django' 카테고리의 다른 글
Android에서 Retrofit 적용할 때 (0) | 2021.10.10 |
---|---|
HTTP, 400 Error 발생 (0) | 2021.10.10 |
Heroku Server 배포(django에서 Heroku서버 배포) (0) | 2021.10.07 |
AWS, action -> Elastic beanstalk와 codebuild -> Elastic beanstalk (0) | 2021.10.05 |
Heroku에서 발생한 Error (0) | 2021.10.04 |
댓글