So richten Sie Python unter FastCGI unter IIS ein
Hier erfahren Sie, wie Sie Python unter FastCGI IIS 7+ einrichten, um den Weg für ein anständiges DJango-Setup zu ebnen
... und in der Lage sein, einen Debugger in den Prozess einzubinden, damit Sie Ihren Python-Code schrittweise durchgehen können
In diesem Beispiel wird die IIS-Verwaltungskonsole nicht verwendet, sondern der Inhalt der resultierenden Konfigurationsdateien aufgelistet
Schritt 1
Installieren Sie Python + einen guten Debugger (in diesem Beispiel wird WingIDE verwendet, für das ich ein hervorragendes Tool gefunden habe). In diesem Beispiel wird der Ordner c: \ python27 vorausgesetzt
Schritt 2
Erstellen Sie einen Webordner, z. B. unter localhost c: \ inetpub \ wwwroot \ mypythonfolder, und fügen Sie die folgende Datei web.config ein:
Beachten Sie die | Pipe-Zeichen in der scriptProcessor-Direktive. Dies wird von IIS verwendet, um das Skript einer fastCgi-Anwendung zuzuordnen (Schritt 3). Es sollte Zeichen für Zeichen mit den Einstellungen für Vollpfad + Pipe-Zeichen + Argumente aus Schritt 3 unten übereinstimmen.
Schritt 3
Fügen Sie in der Datei applicationHost.config im Ordner c: \ windows \ system32 \ inetsrc \ config Folgendes in den Abschnitt ein:
<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>
Schritt 4
Geben Sie in c: \ python27 \ lib \ mylib \ myfcgi.py den folgenden Code ein:
import wingdbstub
importiere os, io, sys ret = "Umgebung: \ r \ n" für param in os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" für arg in sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Schritt 5
Stellen Sie sicher, dass IUSR zum Schreiben in Ihren Ordner c: \ temp berechtigt ist
Schritt 6
Legen Sie wingdbstub.py und wingdebugpw in Ihrem Ordner c: \ python27 \ lib \ mylib \ ab. Dies ermöglicht das Debuggen in Wingide. Diese Dateien werden mit Ihrer Flügelinstallation geliefert. Hinweis: Wenn Python Ihren Code auch in wingstub.pyc kompilieren muss, benötigt IUSR Schreibrechte für diesen Ordner, da der Python-Prozess unter diesem Konto von IIS gestartet wird
Schritt 6
Öffnen Sie wingdb und setzen Sie einen Haltepunkt in der Zeile 'import os, io, sys'
Schritt 7
Klicken Sie in Ihrem Browser auf http: // localhost / mypythonfolder
Wenn alles korrekt funktioniert, sollte Wingide jetzt ausgelöst werden, um den laufenden Code an Ihrem Haltepunkt anzuzeigen. Wenn nicht: - Es liegt entweder ein Firewall-Problem vor. Der Python-Prozess kommuniziert mit der WingIDE-Schnittstelle über eine TCP-Verbindung - oder es gibt ein Problem mit der Sicherheit innerhalb von Wingide. Es benötigt die richtige Version der Wingdebugpw-Datei, die im Grunde ein Passwort oder Token enthält, das den Zugriff auf Ihre Wingide-Installation überprüft. Wenn dies nicht der Fall wäre, könnte jeder mit TCP-Zugriff auf Ihren PC gegen Ihren Code debuggen.
Schritt 8
Stellen Sie sicher, dass in c: \ temp die Protokolldatei erstellt wurde. Dies sollte auch funktionieren, wenn Sie Schritt 7 nicht ausführen können
Schritt 9
Beachten Sie, dass diese Seite den Debugger auslöst, aber keine Seite an den Webbrowser zurückgibt. Einige Hintergrundinformationen: Der Webserver kommuniziert fastcgi über sogenannte "Datensätze". Dies bedeutet, dass jede einzelne Benutzeranforderung in Ihre Anwendung eingeht und in mehreren separaten "Datensätzen" verpackt ist. Jeder Datensatz ist eine Datenstruktur, die den Beginn einer Anforderung, den Querystring, die Post-Variablen usw. angibt. Das Auspacken dieser Datensätze in eine einzelne Anforderung ist etwas umständlich und folgt der Fastcgi-Spezifikation von
http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Als Inhalt von c: \ python27 \ lib \ mylib \ myfcgi.py habe ich gerade eine von helicontech bereitgestellte Kopie von zoofcgi.py abgelegt. Diese Python-Datei kann diese Datensätze dekodieren und eine Seite bereitstellen. Das Debuggen ist sehr interessant. Beachten Sie auch, dass helicontech optional eine DLL bereitstellt, die sich zwischen IIS und und zoofcgi.py befindet. Diese DLL ist jedoch nicht unbedingt erforderlich. Ich glaube, es implementiert eine leicht verbesserte und generische Version der von msft bereitgestellten Fastcgi-Implementierung. Wenn Sie jedoch ihre DLL verwenden und Ihren Code schrittweise durchlaufen möchten, wird der Prozess ziemlich schnell beendet und IIS / die DLL beendet Ihren Python-Prozess, wenn festgestellt wird, dass innerhalb von ein oder zwei Sekunden keine Antwort zurückkommt.
Das ist es. Grundsätzlich erfolgt die Kommunikation zwischen IIS und Ihrem Python-Code über Named Pipes. Sie sollten es mit TCP-Sockets einrichten können, aber ich konnte nicht herausfinden, welcher Port verwendet wird (ich glaube, der Standard sollte in den Port umgewandelt werden, der dann ausgewählt () werden kann, aber das habe ich nicht angegeben jeder Versuch)