카테고리 없음

gunicorn error

민복치 2022. 6. 18. 00:36

멋사에서 수강했던 장고 교육과정의 마지막 배포단계에서 겪었던 에러이다.

동영상 재생 가능 기간 내에 해결방법을 찾지 못했는데 드디어 해결했다.

배포단계에서 gunicorn을 사용했다. 과정은

이 링크

의 내용과 동일하다.

그런데 sudo systemctl start gunicorn을 하고 status를 확인해 보면 계속해서 failed가 떴다.
재시작부터 daemon-reload만 반복해서 하다가 찾아낸 방법은 아래와 같다.

우선 sudo systemctl --failed명령어로 실행에 실패한 서비스 목록을 확인하면 gunicorn.service가 뜬다.
그럼 sudo systemctl reset-failed명령어로 실패한 서비스들을 다 지워준다.
그리고 sudo systemctl status gunicorn.socket 명령어로 일단 gunicorn.socket이 잘 돌아가고 있는지 확인한다.
아직 무언가 코드를 고치지 않았기 때문에 gunicorn.service는 여전히 실행이 안될 것이다.

하지만 이전과 다른 점은
sudo systemctl status gunicorn명령어를 입력했을때, failed가 아닌 inactivate 라고 뜬다.
튜토리얼에 보면 inactivate상태에 관한 내용이 있기 때문에 여기까지만 해도 절반 왔다고 생각했다.
튜토리얼에 보면 제대로 실행이 되지 않을때 쓰라는 명령어가 있는데 그것이 sudo journalctl -u gunicorn 이 명령어 이다.
위 명령어를 입력하면 로그들이 쭉 나온다. 로그 중에서 gunicorn: error: argument --access-logfile: expected one argument가 있길래 이거에 대해 검색했더니 해결방법을 찾을 수 있었다.

해결 방법은 'The solution is just by solving the gunicorn command pattern by revising the above command pattern as follows :' 하고 나와있는데, gunicorn 명령 패턴을 다음과 같이 고쳐씀으로 문제를 해결할 수 있다고 한다.
그리고서 나오는 내용이 gunicorn.service 파일에 있는 코드들이다.
/home/django/env/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/django/apps.sock apps.wsgi:application 이러하다.
포인트는 --access-logifle --workers 3 이부분을 --access-logfile - --workers3 이렇게 고치는 것이다.
정말 놀랍게도 위와 같이 - 하나 추가한 것으로 gunicorn을 실행할 수 있었다.
(gunicorn.service 파일을 수정했기 때문에 새로 daemon-reload를 하는 작업이 필요하다.)

어째서 저 -가 필요한건지는 아직 잘 몰라서 그에 대한 내용은 더 찾아보려고 한다.
해결방법 참고 링크