Cách thiết lập Python trên FastCGI trên IIS
Đây là cách thiết lập Python trên FastCGI IIS 7+ với cách mở đường cho một thiết lập DJango phong nha
... và có thể nối trình gỡ lỗi vào quy trình cho phép bạn chuyển qua mã Python của mình
Ví dụ này không sử dụng bảng điều khiển quản lý IIS nhưng liệt kê nội dung của tệp cấu hình kết quả
Bước 1
Cài đặt Python + trình gỡ lỗi tốt (ví dụ này sử dụng WingIDE mà tôi đã tìm thấy một công cụ tuyệt vời) Ví dụ này giả sử thư mục c: \ python27
Bước 2
Tạo một thư mục web, ví dụ: trên localhost c: \ inetpub \ wwwroot \ mypythonfolder và đặt tệp web.config sau vào đó:
Lưu ý | ký tự ống trong chỉ thị scriptProcessor. Điều này được IIS sử dụng để ánh xạ tập lệnh tới ứng dụng fastCgi (bước 3). Nó phải khớp từng ký tự theo ký tự fullpath + ký tự ống + cài đặt đối số từ bước 3 bên dưới.
Bước 3
Trong tệp apphost.config trong thư mục c: \ windows \ system32 \ inetsrc \ config đặt phần sau vào phần:
<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>
Bước 4
Trong c: \ python27 \ lib \ mylib \ myfcgi.py đặt mã sau đây:
import wingdbstub
nhập os, io, sys ret = "môi trường: \ r \ n" cho param trong os.envir.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.envir [ param]) ret = ret + "\ r \ nArss:" for arg in sys.argv: ret = ret + arg handle = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) xử lý. Đóng ()
Bước 5
Đảm bảo IUSR có quyền ghi vào thư mục c: \ temp của bạn
Bước 6
Đặt wingdbstub.py và wingdebugpw vào thư mục c: \ python27 \ lib \ mylib \ của bạn. Điều này sẽ cho phép gỡ lỗi trong wingide. Những tập tin này được cung cấp với cài đặt cánh của bạn. Lưu ý: nếu Python cũng cần biên dịch mã của bạn thành wingstub.pyc, IUSR cần quyền ghi trên thư mục đó vì quy trình python sẽ được IIS khởi chạy trong tài khoản đó
Bước 6
Mở wingdb và đặt điểm dừng trên dòng 'nhập os, io, sys'
Bước 7
Lượt truy cập trong trình duyệt của bạn http: // localhost / mypythonfolder
Nếu mọi thứ hoạt động chính xác, bây giờ wingide sẽ được kích hoạt để hiển thị mã đang chạy ở điểm dừng của bạn. Nếu không: - hoặc có vấn đề về tường lửa. Quá trình python giao tiếp với giao diện WingIDE thông qua kết nối tcp - hoặc có vấn đề với bảo mật trong wingide. Nó cần phiên bản thích hợp của tệp wingdebugpw, về cơ bản chứa mật khẩu hoặc mã thông báo xác thực quyền truy cập đối với cài đặt wingide của bạn. Nếu đây không phải là trường hợp, bất kỳ ai có quyền truy cập tcp vào máy tính của bạn đều có thể gỡ lỗi đối với mã của bạn.
Bước 8
Xác minh rằng trong c: \ temp logfile đã được tạo. Điều này cũng sẽ hoạt động nếu bạn không thể thực hiện bước 7
Bước 9
Lưu ý rằng trang này kích hoạt trình gỡ lỗi nhưng không trả lại bất kỳ trang nào cho trình duyệt web. Một số nền tảng: máy chủ web giao tiếp với fastcgi thông qua cái gọi là 'bản ghi'. Điều này có nghĩa là mỗi yêu cầu người dùng duy nhất đi vào ứng dụng của bạn được đóng gói trong nhiều 'hồ sơ' riêng biệt. Mỗi bản ghi là một cấu trúc dữ liệu cho biết bắt đầu một yêu cầu, chuỗi truy vấn, biến bài, v.v ... Việc không đóng gói các bản ghi này cho một yêu cầu là loại cồng kềnh, nó tuân theo đặc tả fastcgi của
http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Vì nội dung của c: \ python27 \ lib \ mylib \ myfcgi.py Tôi vừa bỏ vào một bản sao của zoustcgi.py do helicontech cung cấp. Tệp python này có thể giải mã các bản ghi này và phục vụ một trang và khá thú vị để gỡ lỗi. Cũng lưu ý rằng helicontech tùy chọn cung cấp một dll nằm giữa IIS và zoustcgi.py nhưng dll này không thực sự cần thiết. Tôi tin rằng nó triển khai một phiên bản cải tiến và chung chung của việc triển khai fastcgi mà msft cung cấp. Tuy nhiên, khi bạn sử dụng dll của họ, khi bạn muốn chuyển qua mã của mình, quy trình được kết thúc khá kỳ quặc và IIS / DLL sẽ giết quá trình python của bạn khi kết luận không có phản hồi nào quay lại trong vòng một hoặc 2 giây.
Đó là nó. Về nguyên tắc, giao tiếp giữa IIS và mã python của bạn được thực hiện với các đường dẫn có tên. Bạn sẽ có thể thiết lập nó bằng cách sử dụng ổ cắm tcp nhưng tôi không thể tìm ra cổng nào được sử dụng (tôi tin rằng stdin nên được chuyển đổi thành cổng mà sau đó có thể được chọn () ed nhưng tôi đã không cho điều đó bất kỳ nỗ lực nào)