python-'version'
#ex python-3.10.4
gunicorn 설치
requirements.txt 작성
pip list --format=freeze > requirements.txt
format 옵션을 주지 않으면 버전이 아니라 경로가 포함되는 경우가 생기는데 이것때문에 에러가 발생할 수도 있다. 그래서 경로 없이 깨끗한 파일을 얻고 싶다면 꼭 저 옵션을 줘야한다. 전에는 이걸 몰라서 일일이 손으로 경로 지우고 버전 적는 노가다를 했었다..
web: gunicorn '메인 실행파일 이름(py붙이면 안됨)':app
#ex 메인실행파일이 main.py인 경우 web: gunicorn main:app
=> 요약 app.run(host='0.0.0.0')
gunicorn: error: unrecognized arguments: app:app
나는 flask 앱에 데스크톱 용 구글 api client 계정을 연동하여 사용하고 있었다.
데스크톱용 client 계정의 경우 브라우저가 자동으로 실행되고 사용자가 로그인을 하면 토큰을 받아오게 되는데 heroku는 실행할 수 있는 브라우저가 없었기 때문에 열리지 않았고, 응답을 하지 않은채로 계속 시간이 지나니 gunicorn에서 app을 찾을 수 없다는 에러를 낸 것이었다. 서비스 계정으로 바꾸고나니 에러 없이 잘 배포되었다.
H10 - App crashed
object-detection 의존성 문제
어차피 데이터 분석하거나 컴퓨터 비전쪽 웹서비스가 아니라서 그냥 모듈을 requirements.txt에서 지우니 해결 되었다. 충돌 일어나는 모듈 중에 꼭 필요한 모듈이 아니라면 그냥 지워도 된다.
code=H13 desc="Connection closed without response"
페이지를 로드하지 못하고 30초 이상 지나면 에러로 표시된다.
1번 문제를 해결하자 같이 고쳐졌지만 더 길게 설정할 수 있는 방법이 있다.
배포하는데 총 5일정도 걸렸다. 모듈 충돌 문제만 아니었으면 더 빨리 배포할 수 있었을 것이다. 꼭 가상환경 사용하자...의존성 문제 때문에 개발할 때 너무 힘들다.
배포하는 과정에서 한 80%는 에러와 싸우는 과정인 것 같다. 다음에는 도커도 사용 해봐야겠다.