IIS의 FastCGI에서 Python을 설정하는 방법
다음은 알맞은 DJango 설정을위한 FastCGI IIS 7+에서 Python을 설정하는 방법입니다.
... 그리고 프로세스에 디버거를 연결하여 Python 코드를 단계별로 실행할 수 있습니다.
이 예제는 IIS 관리 콘솔을 사용하지 않지만 결과 구성 파일의 내용을 나열합니다.
1 단계
파이썬 + 좋은 디버거를 설치하십시오 (이 예제는 훌륭한 도구를 찾은 WingIDE를 사용합니다)이 예제는 폴더 c : \ python27을 가정합니다
2 단계
예를 들어 localhost c : \ inetpub \ wwwroot \ mypythonfolder에 웹 폴더를 만들고 다음 web.config 파일을 넣습니다.
참고 | scriptProcessor 지시문의 파이프 문자 IIS에서 스크립트를 fastCgi 응용 프로그램에 매핑하는 데 사용됩니다 (3 단계). 아래 3 단계의 전체 경로 + 파이프 문자 + 인수 설정을 문자별로 일치시켜야합니다.
3 단계
c : \ windows \ system32 \ inetsrc \ config 폴더의 applicationHost.config 파일에서 다음 섹션에 배치하십시오.
<fastCgi>
<application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
</fastCgi>
4 단계
c : \ python27 \ lib \ mylib \ myfcgi.py에 다음 코드를 입력하십시오.
import wingdbstub
os, io, sys ret = "environment : \ r \ n"을 os.environ.keys ()의 매개 변수로 가져 오기 : ret = ret + "% s = % s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs :"sys.argv의 arg에 대해 : ret = ret + arg handle = io.open ( "c : \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
5 단계
IUSR에 c : \ temp 폴더에 쓸 수있는 권한이 있는지 확인하십시오.
6 단계
wingdbstub.py 및 wingdebugpw를 c : \ python27 \ lib \ mylib \ 폴더에 넣습니다. 이것은 wingide에서 디버깅을 가능하게합니다. 이러한 파일은 윙 설치와 함께 제공됩니다. 참고 : Python에서 코드를 wingstub.pyc로 컴파일해야하는 경우, IUSR은 IIS에 의해 해당 계정으로 파이썬 프로세스가 시작되므로 해당 폴더에 대한 쓰기 권한이 필요합니다.
6 단계
wingdb를 열고 'import os, io, sys'라인에 중단 점을 설정하십시오.
7 단계
브라우저에서 적중 http : // localhost / mypythonfolder
모든 것이 올바르게 작동하면 이제 중단 지점에 실행 코드를 표시하도록 wingide가 트리거되어야합니다. 그렇지 않은 경우 :-방화벽 문제가 있습니다. 파이썬 프로세스는 tcp 연결을 통해 WingIDE 인터페이스와 통신합니다. 그렇지 않으면 wingide의 보안에 문제가 있습니다. wingidebugpw 파일의 올바른 버전이 필요합니다.이 파일에는 기본적으로 wingide 설치에 대한 액세스를 확인하는 비밀번호 또는 토큰이 포함되어 있습니다. 그렇지 않은 경우 PC에 대한 tcp 액세스 권한이있는 사용자는 코드를 디버그 할 수 있습니다.
8 단계
c : \ temp에서 로그 파일이 작성되었는지 확인하십시오. 7 단계를 진행할 수없는 경우에도 작동합니다
9 단계
이 페이지는 디버거를 트리거하지만 웹 브라우저에 어떤 페이지도 반환하지 않습니다. 일부 배경 : 웹 서버는 소위 '레코드'를 통해 fastcgi와 통신합니다. 즉, 각 단일 사용자 요청은 여러 개의 개별 '레코드'로 압축되어 애플리케이션에 제공됩니다. 각 레코드는 요청의 시작, 쿼리 문자열, 사후 변수 등을 나타내는 데이터 구조입니다. 이러한 레코드를 단일 요청으로 압축 해제하는 것은 번거롭고 http : //www.fastcgi 의 fastcgi 사양을 따릅니다
. .com / devkit / doc / fcgi-spec.html # S1
c : \ python27 \ lib \ mylib \ myfcgi.py의 내용으로 helicontech에서 제공 한 zoofcgi.py 사본을 방금 삭제했습니다. 이 python 파일은 이러한 레코드를 디코딩하고 페이지를 제공 할 수 있으며 디버깅하기에 매우 흥미 롭습니다. 또한 helicontech는 IIS와 zoofcgi.py 사이에있는 dll을 선택적으로 제공하지만이 dll이 꼭 필요한 것은 아닙니다. msft가 제공하는 fastcgi 구현의 약간 개선되고 일반적인 버전을 구현한다고 생각합니다. 그러나 dll을 사용할 때 코드를 단계별로 실행하려고하면 프로세스가 다소 신속하게 종료되고 IIS / DLL은 1 초 또는 2 이내에 응답이 없다고 결론을 내면 Python 프로세스를 종료합니다.
그게 다야. 원칙적으로 IIS와 파이썬 코드 간의 통신은 명명 된 파이프를 사용하여 수행됩니다. tcp 소켓을 사용하여 설정할 수는 있지만 어떤 포트가 사용되는지 알아낼 수 없었습니다 (stdin을 포트로 변환해야한다고 생각합니다. 모든 시도)