Comment configurer Python sur FastCGI sur IIS
Voici comment configurer Python sur FastCGI IIS 7+ avec ouvre la voie à une configuration DJango décente
... et être capable de connecter un débogueur au processus vous permettant de parcourir votre code Python
Cet exemple n'utilise pas la console de gestion IIS mais répertorie le contenu des fichiers de configuration résultants
Étape 1
Installez Python + un bon débogueur (cet exemple utilise WingIDE dont j'ai trouvé un excellent outil) Cet exemple suppose que le dossier c: \ python27
Étape 2
Créez un dossier Web, par exemple sur localhost c: \ inetpub \ wwwroot \ mypythonfolder et placez-y le fichier web.config suivant:
Notez le | caractère de canal dans la directive scriptProcessor. Il est utilisé par IIS pour mapper le script à une application fastCgi (étape 3). Il doit correspondre caractère par caractère aux paramètres de chemin complet + caractère de canal + arguments de l'étape 3 ci-dessous.
Étape 3
Dans le fichier applicationHost.config du dossier c: \ windows \ system32 \ inetsrc \ config, placez ce qui suit dans la section:
<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>
Étape 4
Dans c: \ python27 \ lib \ mylib \ myfcgi.py mettez le code suivant:
import wingdbstub
importer os, io, sys ret = "environnement: \ r \ n" pour param dans os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" pour arg dans sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Étape 5
Assurez-vous que l'IUSR a le droit d'écrire dans votre dossier c: \ temp
Étape 6
Placez wingdbstub.py et wingdebugpw dans votre dossier c: \ python27 \ lib \ mylib \. Cela permettra le débogage dans wingide. Ces fichiers sont fournis avec l'installation de votre aile. Remarque: si Python doit également compiler votre code dans wingstub.pyc, IUSR a besoin des droits d'écriture sur ce dossier car le processus python sera lancé sous ce compte par IIS
Étape 6
Ouvrez wingdb et définissez un point d'arrêt sur la ligne 'import os, io, sys'
Étape 7
Frappez dans votre navigateur http: // localhost / mypythonfolder
Si tout fonctionne correctement, wingide devrait maintenant être déclenché pour afficher le code en cours d'exécution à votre point d'arrêt. Sinon: - soit il y a un problème de pare-feu. Le processus python communique avec l'interface WingIDE via une connexion TCP - ou il y a un problème de sécurité au sein de Wingide. Il a besoin de la version appropriée du fichier wingdebugpw, qui contient essentiellement un mot de passe ou un jeton qui valide l'accès par rapport à votre installation wingide. Si ce n'était pas le cas, toute personne ayant un accès TCP à votre PC pourrait déboguer contre votre code.
Étape 8
Vérifiez que dans c: \ temp le fichier journal est créé. Cela devrait également fonctionner si vous ne pouvez pas démarrer l'étape 7
Étape 9
Notez que cette page déclenche le débogueur mais ne renvoie aucune page au navigateur Web. Quelques informations de base: le serveur Web communique fastcgi via ce que l'on appelle des «enregistrements». Cela signifie que chaque demande utilisateur unique entre dans votre application, emballée dans plusieurs «enregistrements» distincts. Chaque enregistrement est une structure de données qui indique le début d'une demande, la chaîne de requête, les variables poste , etc. Le non-emballage de ces enregistrements à une seule demande est un peu encombrant, il suit la spécification FastCGI de
http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Comme le contenu de c: \ python27 \ lib \ mylib \ myfcgi.py, je viens de déposer une copie de zoofcgi.py fournie par helicontech. Ce fichier python est capable de décoder ces enregistrements et de servir une page et est assez intéressant à déboguer. Notez également que helicontech fournit éventuellement une DLL qui se situe entre IIS et et zoofcgi.py mais cette DLL n'est pas strictement nécessaire. Je crois qu'il implémente une version légèrement améliorée et générique de l'implémentation fastcgi fournie par msft. Cependant, lorsque vous utilisez leur dll, lorsque vous souhaitez parcourir votre code, le processus se termine assez rapidement et IIS / la DLL tue votre processus python lorsqu'elle conclut qu'aucune réponse ne revient dans une seconde ou deux.
C'est ça. En principe, la communication entre IIS et votre code python se fait avec des canaux nommés. Vous devriez pouvoir le configurer en utilisant des sockets tcp mais je n'ai pas pu déterminer quel port est utilisé (je crois que le stdin devrait être transformé en le port qui peut ensuite être sélectionné () ed mais je n'ai pas donné cela toute tentative)