Cara mengatur Python pada FastCGI di IIS
Berikut cara mengatur Python pada FastCGI IIS 7+ dengan membuka jalan bagi pengaturan DJango yang layak
... dan dapat mengaitkan debugger ke dalam proses yang memungkinkan Anda untuk menelusuri kode Python Anda
Contoh ini tidak menggunakan konsol manajemen IIS tetapi mencantumkan konten file konfigurasi yang dihasilkan
Langkah 1
Instal Python + debugger yang baik (contoh ini menggunakan WingIDE yang saya temukan alat yang sangat baik) Contoh ini mengasumsikan folder c: \ python27
Langkah 2
Buat folder web, misalnya di localhost c: \ inetpub \ wwwroot \ mypythonfolder dan letakkan file web.config berikut di dalamnya:
Perhatikan | karakter pipa dalam direktif scriptProcessor. Ini digunakan oleh IIS untuk memetakan skrip ke aplikasi fastCgi (langkah 3). Seharusnya cocok dengan karakter dengan karakter pengaturan jalur penuh + karakter pipa + argumen dari langkah 3 di bawah ini.
Langkah 3
Dalam file applicationHost.config di folder c: \ windows \ system32 \ inetsrc \ config letakkan yang berikut di bagian ini:
<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>
Langkah 4
Di c: \ python27 \ lib \ mylib \ myfcgi.py masukkan kode berikut:
import wingdbstub
impor os, io, sys ret = "environment: \ r \ n" untuk param di os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" untuk arg di sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Langkah 5
Pastikan IUSR memiliki hak untuk menulis ke folder c: \ temp Anda
Langkah 6
Masukkan wingdbstub.py dan wingdebugpw ke folder c: \ python27 \ lib \ mylib \ Anda. Ini akan memungkinkan debugging di wingide. File-file ini disediakan dengan instalasi sayap Anda. Catatan: jika Python juga perlu mengkompilasi kode Anda ke wingstub.pyc, IUSR perlu menulis hak pada folder itu karena proses python akan diluncurkan di bawah akun itu oleh IIS
Langkah 6
Buka wingdb dan atur breakpoint pada baris 'import os, io, sys'
Langkah 7
Hit di browser Anda http: // localhost / mypythonfolder
Jika semuanya berfungsi dengan benar, wingide sekarang seharusnya dipicu untuk menampilkan kode yang sedang berjalan di breakpoint Anda. Jika tidak: - ada masalah firewall. Proses python berkomunikasi dengan antarmuka WingIDE melalui koneksi tcp - atau ada masalah dengan keamanan di dalam wingide. Perlu versi yang tepat dari file wingdebugpw, yang pada dasarnya berisi kata sandi atau token yang memvalidasi akses terhadap instalasi wingide Anda. Jika ini tidak terjadi, siapa pun dengan akses tcp ke komputer Anda dapat melakukan debug terhadap kode Anda.
Langkah 8
Verifikasi bahwa di c: \ temp logfile dibuat. Ini juga harus bekerja jika Anda tidak dapat melanjutkan langkah 7
Langkah 9
Perhatikan bahwa halaman ini memicu debugger tetapi tidak mengembalikan halaman apa pun ke browser web. Beberapa latar belakang: server web berkomunikasi fastcgi melalui apa yang disebut 'catatan'. Ini berarti bahwa setiap permintaan pengguna tunggal masuk ke aplikasi Anda yang dikemas dalam beberapa 'catatan' terpisah. Setiap catatan adalah struktur data yang menunjukkan permulaan permintaan, querystring, variabel pos dll. Membatalkan pengemasan catatan ini ke satu permintaan agak rumit, mengikuti spesifikasi fastcgi
http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Sebagai isi dari c: \ python27 \ lib \ mylib \ myfcgi.py Saya baru saja memasukkan salinan zoofcgi.py yang disediakan oleh helicontech. File python ini dapat memecahkan kode catatan-catatan ini dan melayani halaman dan cukup menarik untuk di-debug. Perhatikan juga bahwa helicontech secara opsional menyediakan dll yang berada di antara IIS dan dan zoofcgi.py tetapi dll ini tidak sepenuhnya diperlukan. Saya percaya ini mengimplementasikan versi yang sedikit lebih baik dan generik dari implementasi fastcgi yang disediakan msft. Namun ketika Anda menggunakan dll mereka, ketika Anda ingin melangkah melalui kode Anda proses diakhiri dengan agak cepat dan IIS / DLL membunuh proses python Anda ketika menyimpulkan tidak ada respons yang akan kembali dalam hitungan detik atau 2.
Itu dia. Pada prinsipnya komunikasi antara IIS dan kode python Anda dilakukan dengan pipa bernama. Anda harus dapat mengaturnya menggunakan soket tcp tetapi saya tidak dapat menentukan port mana yang digunakan (saya percaya stdin harus diubah menjadi port yang kemudian dapat dipilih () tetapi saya tidak memberikannya usaha apapun)