일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- django httpd error
- django 프로젝트 시작
- django windows 배포 에러
- django apache deploy error
- 원격 연결 포트 포워딩
- 2643 java
- django 웹 페이지
- java di
- 2961 java
- APPEND_SLASH = FALSE
- apache pythonpath
- windows apache wsgi 에러
- 14711 java
- 14711 타일 뒤집기
- django settings.py
- 2643 색종이 올려 놓기
- 1188 java
- Problems occurred while performing provisioning operation
- 2661 좋은 수열
- 2661 java
- 18233 java
- django The requested operation has failed!
- The requested operation has failed!
- 2961 도영이가 만든 맛있는 음식
- 18233 러버덕
- django
- windows 원격 연결 설정
- 1188 음식 평론가
- 공유기 원격 설정
- 18233 비트마스킹
라이브러리는 도서관 아닌가요
Windows Apache Django wsgi - 배포 에러 본문
보통 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
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 경로를 확인해보자.
#수정 사항 #반영 후에 #잊지 말자 #아파치 #재시작