Como configurar o Python no FastCGI no IIS
Veja como configurar o Python no FastCGI IIS 7+ com abre caminho para uma instalação decente do DJango
... e poder conectar um depurador ao processo, permitindo que você percorra seu código Python
Este exemplo não usa o console de gerenciamento do IIS, mas lista o conteúdo dos arquivos de configuração resultantes
Passo 1
Instale o Python + um bom depurador (este exemplo usa o WingIDE, que achei uma excelente ferramenta) Este exemplo assume a pasta c: \ python27
Passo 2
Crie uma pasta da web, por exemplo, em localhost c: \ inetpub \ wwwroot \ mypythonfolder e coloque o seguinte arquivo web.config nela:
Observe o | caractere de pipe na diretiva scriptProcessor. Isso é usado pelo IIS para mapear o script para um aplicativo fastCgi (etapa 3). Ele deve corresponder caractere por caractere às configurações de caminho completo + caractere de pipe + argumentos da etapa 3 abaixo.
etapa 3
No arquivo applicationHost.config na pasta c: \ windows \ system32 \ inetsrc \ config, coloque o seguinte na seção:
<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>
Passo 4
Em c: \ python27 \ lib \ mylib \ myfcgi.py, coloque o seguinte código:
import wingdbstub
importar os, io, sys ret = "ambiente: \ r \ n" para param em os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" para arg em sys.argv: ret = ret + arg manipula = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Etapa 5
Verifique se o IUSR tem direitos para gravar na sua pasta c: \ temp
Etapa 6
Coloque wingdbstub.py e wingdebugpw na sua pasta c: \ python27 \ lib \ mylib \. Isso permitirá a depuração no wingide. Esses arquivos são fornecidos com a instalação do seu wing. Nota: se o Python também precisar compilar seu código no wingstub.pyc, o IUSR precisará de direitos de gravação nessa pasta, pois o processo python será iniciado sob essa conta pelo IIS
Etapa 6
Abra o wingdb e defina um ponto de interrupção na linha 'import os, io, sys'
Etapa 7
Clique no seu navegador http: // localhost / mypythonfolder
Se tudo funcionar corretamente, o wingide agora deve ser acionado para exibir o código em execução no seu ponto de interrupção. Caso contrário: - ou há um problema de firewall. O processo python se comunica com a interface WingIDE através de uma conexão tcp - ou há um problema com a segurança dentro do wingide. Ele precisa da versão correta do arquivo wingdebugpw, que basicamente contém uma senha ou token que valida o acesso à sua instalação lateral. Se não fosse esse o caso, qualquer pessoa com acesso tcp ao seu PC poderia depurar seu código.
Etapa 8
Verifique se em c: \ temp o arquivo de log foi criado. Isso também deve funcionar se você não conseguir dar o passo 7
Etapa 9
Observe que esta página aciona o depurador, mas não retorna nenhuma página ao navegador da web. Alguns antecedentes: o servidor da web comunica o fastcgi através dos chamados 'registros'. Isso significa que cada solicitação de usuário entra em seu aplicativo compactado em vários 'registros' separados. Cada registro é uma estrutura de dados que indica o início de uma solicitação, a string de consulta, as variáveis de postagem etc. A descompactação desses registros em uma única solicitação é meio complicada, segue a especificação fastcgi de
http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Como o conteúdo de c: \ python27 \ lib \ mylib \ myfcgi.py, acabei de inserir uma cópia do zoofcgi.py fornecida pela helicontech. Este arquivo python é capaz de decodificar esses registros e servir uma página e é bastante interessante para depurar. Observe também que o helicontech opcionalmente fornece uma dll que fica entre o IIS e o zoofcgi.py, mas essa dll não é estritamente necessária. Eu acredito que implementa uma versão genérica e ligeiramente melhorada da implementação fastcgi que o msft fornece. No entanto, quando você usa a dll deles, quando você deseja percorrer seu código, o processo é finalizado de maneira bastante rápida e o IIS / DLL mata o processo python quando conclui que nenhuma resposta está voltando dentro de um segundo ou 2.
É isso aí. Em princípio, a comunicação entre o IIS e seu código python é feita com pipes nomeados. Você deve ser capaz de configurá-lo usando soquetes tcp, mas não consegui descobrir qual porta é usada (acredito que o stdin deve ser transformado na porta que pode ser selecionada (), mas não dei isso qualquer tentativa)