IISのFastCGIでPythonを設定する方法
FastCGI IIS 7以降でPythonを設定する方法は、DJangoを適切にセットアップするための道を開く
...そしてデバッガーをプロセスにフックして、Pythonコードをステップ実行できるようにする
この例ではIIS管理コンソールを使用していませんが、結果の構成ファイルの内容を一覧表示しています
ステップ1
Python +優れたデバッガーをインストールします(この例では、優れたツールを見つけたWingIDEを使用しています)この例では、フォルダーc:\ python27を想定しています
ステップ2
localhost c:\ inetpub \ wwwroot \ mypythonfolderなどにWebフォルダーを作成し、その中に次の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
import os、io、sys ret = "environment:\ r \ n" for param in os.environ.keys():ret = ret + "%s =%s \ r \ n"%(param、os.environ [ param])ret = ret + "\ r \ nArgs:" sys.argvの引数:ret = ret + argハンドル= 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にコンパイルする必要がある場合、PythonプロセスはIISによってそのアカウントで起動されるため、IUSRはそのフォルダーに対する書き込み権限が必要です。
手順6
wingdbを開き、 'import os、io、sys'行にブレークポイントを設定します
手順7
ブラウザでヒットhttp:// localhost / mypythonfolder
すべてが正常に機能する場合は、wingideがトリガーされ、ブレークポイントで実行中のコードが表示されます。そうでない場合:-ファイアウォールの問題があります。PythonプロセスがTCP接続を介してWingIDEインターフェースと通信している-またはwingide内のセキュリティに問題があります。適切なバージョンのwingdebugpwファイルが必要です。これには、基本的に、wingideインストールに対するアクセスを検証するパスワードまたはトークンが含まれています。これが当てはまらない場合、PCにTCPでアクセスできる人なら誰でもコードをデバッグできます。
手順8
c:\ tempにログファイルが作成されていることを確認します。これは、ステップ7を実行できない場合にも機能するはずです。
手順9
このページはデバッガーをトリガーしますが、Webブラウザーにページを返さないことに注意してください。背景:ウェブサーバーは、いわゆる「レコード」を介してfastcgiと通信します。つまり、1つのユーザーリクエストが1つずつ、複数の個別の「レコード」にパックされてアプリケーションに送られます。各レコードは、リクエストの開始、クエリ文字列、ポスト変数などを示すデータ構造です。単一のリクエストへのこれらのレコードのアンパックは、やや面倒であり、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とPythonコード間の通信は名前付きパイプを使用して行われます。あなたはtcpソケットを使用してそれを設定することができるはずですが、私はどのポートが使用されているかを理解できませんでした(私はstdinをselect()編集できるポートに変換する必要があると思いますが、私はそれを与えませんでしたあらゆる試み)