Come configurare Python su FastCGI su IIS
Ecco come configurare Python su FastCGI IIS 7+ con apre la strada a una configurazione decente di DJango
... ed essere in grado di agganciare un debugger al processo che consente di scorrere il codice Python
Questo esempio non utilizza la console di gestione IIS ma elenca il contenuto dei file di configurazione risultanti
Passo 1
Installa Python + un buon debugger (questo esempio usa WingIDE che ho trovato uno strumento eccellente) Questo esempio presuppone la cartella c: \ python27
Passo 2
Creare una cartella Web, ad esempio su localhost c: \ inetpub \ wwwroot \ mypythonfolder e inserire il seguente file web.config:
Nota il | carattere pipe nella direttiva scriptProcessor. Viene utilizzato da IIS per mappare lo script su un'applicazione fastCgi (passaggio 3). Deve corrispondere carattere per carattere al percorso completo + carattere pipe + impostazioni degli argomenti dal passaggio 3 di seguito.
Passaggio 3
Nel file applicationHost.config nella cartella c: \ windows \ system32 \ inetsrc \ config inserire quanto segue nella sezione:
<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>
Passaggio 4
In c: \ python27 \ lib \ mylib \ myfcgi.py inserisci il seguente codice:
import wingdbstub
import os, io, sys ret = "environment: \ r \ n" per param in os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" per arg in sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Passaggio 5
Assicurarsi che IUSR disponga dei diritti per scrivere nella cartella c: \ temp
Passaggio 6
Inserisci wingdbstub.py e wingdebugpw nella tua cartella c: \ python27 \ lib \ mylib \. Ciò consentirà il debug in wingide. Questi file vengono forniti con l'installazione dell'ala. Nota: se Python deve anche compilare il codice in wingstub.pyc, IUSR necessita dei diritti di scrittura su quella cartella poiché il processo python verrà avviato con quell'account da IIS
Passaggio 6
Apri wingdb e imposta un punto di interruzione sulla riga "import os, io, sys"
Passaggio 7
Hit nel tuo browser http: // localhost / mypythonfolder
Se tutto funziona correttamente, Wingide ora dovrebbe essere attivato per visualizzare il codice in esecuzione nel punto di interruzione. In caso contrario: - o c'è un problema con il firewall. Il processo Python comunica con l'interfaccia WingIDE tramite una connessione TCPC o c'è un problema con la sicurezza all'interno di Wingide. È necessaria la versione corretta del file wingdebugpw, che in pratica contiene una password o un token che convalida l'accesso contro l'installazione di Wingide. In caso contrario, chiunque disponga dell'accesso tcp al PC potrebbe eseguire il debug con il codice.
Passaggio 8
Verificare che in c: \ temp sia stato creato il file di registro. Questo dovrebbe funzionare anche se non riesci ad avviare il passaggio 7
Passaggio 9
Si noti che questa pagina attiva il debugger ma non restituisce alcuna pagina al browser web. Alcuni retroscena: il server web comunica fastcgi attraverso i cosiddetti "record". Ciò significa che ogni singola richiesta dell'utente arriva nella tua applicazione racchiusa in più "record" separati. Ogni record è una struttura di dati che indica l'inizio di una richiesta, la stringa di query, le variabili di post, ecc. Il disimballaggio di questi record in una singola richiesta è un po 'ingombrante, segue le specifiche fastcgi di
http: //www.fastcgi .com / DevKit / doc / fcgi-spec.html # S1
Come contenuto di c: \ python27 \ lib \ mylib \ myfcgi.py ho appena inserito una copia di zoofcgi.py fornita da helicontech. Questo file python è in grado di decodificare questi record e servire una pagina ed è abbastanza interessante per il debug. Si noti inoltre che helicontech fornisce facoltativamente una dll che si trova tra IIS e zoofcgi.py ma questa dll non è strettamente necessaria. Credo che implementa una versione leggermente migliorata e generica dell'implementazione fastcgi fornita da msft. Tuttavia, quando si utilizza la loro dll, quando si desidera scorrere il codice, il processo viene terminato in modo piuttosto rapido e IIS / DLL interrompe il processo Python quando si conclude che non viene restituita risposta entro un secondo o 2.
Questo è tutto. In linea di principio, la comunicazione tra IIS e il codice Python viene effettuata con named pipe. Dovresti essere in grado di configurarlo usando socket tcp ma non sono stato in grado di capire quale porta viene utilizzata (credo che lo stdin dovrebbe essere trasformato nella porta che quindi può essere selezionata () ed ma non l'ho dato qualsiasi tentativo)