라이브러리는 도서관 아닌가요

Windows Apache Django wsgi - 배포 에러 본문

Django/Django Trouble Shooting

Windows Apache Django wsgi - 배포 에러

veryhi 2022. 11. 17. 11:28

 

보통 Django와 wsgi 조합의 웹 서버는 배포될 때 Linux 환경 아래서 동작한다.

 

Windows 환경으로 구동할 일이 잘 없는데, 이번에 배포할 일이 생겼다.

 

Django App의 틀을 어느정도 잡은 다음 배포하려던 차에

 

Apache Monitor로 실행하려니까 "The requested operation has failed!"라는 error를 만나게 되었다.

 

 

 

가장 우선적으로 필요한 건 Apache의 에러 로그를 확인하는 것이다.

 

처음에 이걸 간과하고 다른 설정들 만지다가 시간을 잡아 먹혔다.

 

Windows에 설치된 Apache24 폴더 내의 logs 폴더에 들어가면 error.log가 있는데,

 

이것을 열어서 확인한다.

 

 

 

실행된 횟수가 많아 로그가 많다면,

 

안의 내용을 모두 지우고 다시 실행시켜서 보고자 하는 에러 로그만 남겨도 된다.

 

개발 초기라면 중요한 로그는 없을테니까 괜찮다. 아니라면 따로 저장을 하던지 해서 주의를 기울여야 한다.

 

 

 

나의 에러의 내용은 이랬다.

 

Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'

 

encoding 단계 쯤에서 뻑이 난 것뿐 그냥 python path를 잡지 못해서 발생한 에러이다.

 

그래서 핵심은 저 문단 위를 찾아 올려다 보면,

 

아마 configuration 단에

 

PYTHONHOME = (not set)
PYTHONPATH = (not set)

 

요런 내용이 있을 것이다.

 

즉, python 경로들이 잡혀있지 않은 것이다.

 

이것을 잡아내는데 특히 시간이 걸린 이유는,

 

python을 서버 컴퓨터에 최초 설치할 때 이미 변수를 잡을 수 있게끔 설정하여 설치했기 때문이다.

 

아래 포스팅 참고

https://verycrazy.tistory.com/41

 

Python 설치

1. 아래의 두 옵션 다 체크 후 Install Now (path를 자동 등록해주니 얼마나 좋은가...) 2. path length limit을 해제 (의외로 경각심 생기게 하는 방패 모양 기호(대체 왜?)가 있다.) 3. cmd와 idle shell로 동작 확

verycrazy.tistory.com

cmd 창에서도 python 명령어가 잘 동작했기 때문에 특히 짐작하기가 어려웠다.

 

 

 

windows 실행 파일로 설치한 분들은 분명 다 같은 에러를 겪지 싶다.

 

구글링을 해도 해결되지 못한 채로 남아 있는 경우가 있어서 애를 좀 먹었고

 

덕분에 포스팅을 하게 되었다.

 

 

 

그래서 해결 방안이 뭐냐면,

 

저 설정 파일이 원하는 이름대로 windows 환경 변수를 등록해주는 것이다. (갓눅스 사랑합니다.)

 

아랫단의 새로 만들기(W)다.

 

내용은 아래 두 개를 설정해주면 된다.

 

PYTHONHOME
C:\Users\[windows 계정 이름]\AppData\Local\Programs\Python\Python39

PYTHONPATH
C:\Users\[windows 계정 이름]\AppData\Local\Programs\Python\Python39\include

 

간략하게 저런 경로로 잡을 수 있다. (당연히 사용자마다 경로는 다르니 주의할 것!)

 

 

 

하지만 우리는 대부분 서버를 구동할 때 가상환경을 사용하기 때문에 여기에 또 포커스를 맞춰야 하는데,

 

위의 PYTHONHOME과 PYTHONPATH를 잡아주는 것으로 가상환경의 python 경로 또한 잘 잡히는 것을 확인했다.

 

가장 쉬운 경로 확인 방법은 가상환경을 activate한 후에,

 

cmd 창에서 python 명령어를 쳐서 python 쉘 진입이 가능한가로 확인할 수 있다.

 

 

 

virtualenv를 사용해서 가상환경을 구성했다면, Scripts 디렉토리 안에 activate와 activate.bat 파일이 있을 것이다.

 

재밌는 건 이 파일을 실행할 때 따로 경로를 잡는 듯한 소스코드가 안에 있다는 것이다.

 

bat 파일을 ide에 넣어서 요모조모 살펴보면,

 

가상 환경의 python path를 잡는 역할을 하는 구문을 볼 수 있다.

 

아래는 디폴트 값이고 C#의 문법처럼 보인다.

 

if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
set PYTHONHOME=

 

Apache의 vhost 설정 파일을 이용해 가상환경으로 서버를 구축할 때

 

만약 python 경로 문제가 생긴다면 위의 구문을 참고해서 가상환경의 python 경로를 확인해보자.

 

 

 

#수정 사항 #반영 후에 #잊지 말자 #아파치 #재시작

 

Comments