Если вы застряли с использованием IIS, используйте PyISAPIe вместо CGI, если можете. Инструкции и ссылки для PyISAPIe ниже. Ваш веб-хостинг будет знать гораздо больше о расширениях ISAPI, если они будут управлять IIS, чем о Python, и им не нужно много знать о Python с PyISAPIe.
МНОГО ЛУЧШЕГО СПОСОБА ЭТОГО ИСПОЛЬЗОВАНИЯ PyISAPIe, ISAPI EXTENSION . PyISAPIe намного, намного быстрее, чем CGI на IIS7. Это похоже на mod_python на Apache. На домашней странице проекта PyISAPIe есть инструкции по настройке Django с WSGI поверх PyISAPIe. Это доведет вашу производительность до разумных скоростей для публичного сайта с высоким трафиком.
Настройка Django в IIS + Python через CGI-среду будет ужасно медленной для любого производственного использования. Вы никогда не должны использовать это для веб-сайта, на котором вы ожидаете обслуживать больше, чем несколько запросов в минуту. Это также сильно ограничивает возможности кэширования в памяти в инфраструктуре кэширования Django, поскольку процесс приложения Django перезапускается при каждом новом запросе.
На нормальном веб-сервере, таком как Apache, lighttpd и т. Д., С mod_python интерпретатор Python, выполняющий процесс Django, остается в памяти и инициализируется каждым новым рабочим потоком Apache, который обрабатывает много запросов в течение времени. Это означает, что Python + Django не закрываются и не перезапускаются для каждого нового запроса. В настройке FastCGI веб-сервер (например, Apache или lighttpd) создает сокет (домен UNIX или TCP), через который он связывается с приложением FastCGI (веб-приложением Django) по протоколу FastCGI. То же самое для настройки HTTP-прокси (они говорят на HTTP вместо FastCGI). В среде CGI вызывается интерпретатор Python, который запускает приложение Django полностью заново для каждого запроса, поэтому приложение не может сохранять состояние между запросами в памяти и не может должным образом кэшироваться нигде, кроме базы данных.
Достаточно разглагольствовать, если вы должны использовать IIS + CGI + Django, вот как выполнить эту ужасную ужасную вещь: Используйте следующий код, чтобы создать свой собственный CGI-скрипт, который запускает ваше приложение Django (он переводит между CGI и WSGI). Вам нужно будет немного отредактировать скрипт, чтобы он указывал на ваше приложение и код Django. Это тот CGI-скрипт, к которому вам нужно будет передавать запросы. Далее вам нужно переслать / переписать все запросы к вашему CGI-скрипту ...
В IIS6 вам потребуется эквивалент mod_rewrite, такой как IISRewrite, который, я думаю, не является бесплатным и является закрытым исходным кодом. Под IIS7 Microsoft наконец-то включила модуль перезаписи URL. Документация на него находится здесь . Инструкции по созданию правил перезаписи в IIS7 находятся здесь . Вы захотите переслать все по целевому базовому URL, который будет обрабатываться вашим CGI-скриптом.
Как настроить Python на FastCGI на IIS
Вот как настроить Python на FastCGI IIS 7+, открывая путь для достойной настройки DJango
... и иметь возможность подключить отладчик к процессу, позволяющему вам шагать по коду Python
В этом примере не используется консоль управления IIS, а перечислено содержимое полученных файлов конфигурации.
Шаг 1
Установите Python + хороший отладчик (в этом примере используется WingIDE, который я нашел отличным инструментом) В этом примере предполагается, что папка c: \ python27
Шаг 2
Создайте веб-папку, например, на localhost c: \ inetpub \ wwwroot \ mypythonfolder и поместите в нее следующий файл web.config:
Обратите внимание на | символ трубы в директиве scriptProcessor. Это используется IIS для сопоставления сценария с приложением fastCgi (шаг 3). Он должен совпадать символ за символом с полными путями + символом трубы + параметрами аргументов, начиная с шага 3 ниже.
Шаг 3
В файле applicationHost.config в папке c: \ windows \ system32 \ inetsrc \ config поместите в раздел следующее:
Шаг 4
В c: \ python27 \ lib \ mylib \ myfcgi.py поместите следующий код:
импортировать os, io, sys ret = "environment: \ r \ n" для параметра в os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" для аргумента в sys.argv: ret = ret + arg handle = 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, IUSR нужны права на запись в эту папку, так как процесс Python будет запущен под этой учетной записью IIS
Шаг 6
Откройте wingdb и установите точку останова на строке import os, io, sys
Шаг 7
Нажмите в вашем браузере http: // localhost / mypythonfolder
Если все работает правильно, то должен сработать wingide для отображения кода выполнения на вашей точке останова. Если нет: - либо есть проблема с брандмауэром. Процесс python связывается с интерфейсом WingIDE через TCP-соединение - или есть проблема с безопасностью в wingide. Ему нужна правильная версия файла wingdebugpw, который в основном содержит пароль или токен, который проверяет доступ к вашей установке wingide. Если бы это было не так, любой, у кого есть tcp-доступ к вашему компьютеру, мог бы отладить ваш код.
Шаг 8
Убедитесь, что в c: \ temp создан файл журнала. Это также должно работать, если вы не можете выполнить шаг 7
Шаг 9
Обратите внимание, что эта страница запускает отладчик, но не возвращает ни одной страницы веб-браузеру. Немного предыстории: веб-сервер передает fastcgi через так называемые «записи». Это означает, что каждый запрос пользователя поступает в ваше приложение, упакованное в несколько отдельных «записей». Каждая запись представляет собой структуру данных, которая указывает начало запроса, строку запроса, переменные записи и т. Д. Распаковка этих записей в один запрос является довольно громоздкой, она соответствует спецификации fastcgi http: //www.fastcgi. .com / DevKit / DOC / FCGI-spec.html # S1
Что касается содержимого c: \ python27 \ lib \ mylib \ myfcgi.py, я просто поместил копию zoofcgi.py, предоставленную helicontech. Этот файл python способен декодировать эти записи и обслуживать страницу и довольно интересен для отладки. Также обратите внимание, что helicontech дополнительно предоставляет dll, которая находится между IIS и zoofcgi.py, но эта dll не является строго необходимой. Я считаю, что он реализует слегка улучшенную и общую версию реализации fastcgi, которую предоставляет msft. Однако, когда вы используете их dll, когда вы хотите пройтись по коду, процесс завершается довольно быстро, и IIS / DLL убивает ваш процесс python, когда он приходит к выводу, что ответ не возвращается в течение секунды или 2.
Вот и все. В принципе, связь между IIS и вашим кодом на python осуществляется по именованным каналам. Вы должны иметь возможность настроить его с помощью сокетов tcp, но я не смог выяснить, какой порт используется (я считаю, что stdin должен быть преобразован в порт, который затем можно выбрать select () ed, но я этого не дал любая попытка)
источник
Я не пробовал это с Python, но он отлично работал как CGI с Perl. Продукты ActiveState легко интегрируются с IIS. Я имел большой успех с ActivePerl. У них также есть ActivePython, который может (вероятно) также справиться с этой задачей. Тогда я думаю, что вы просто скачаете Django и установите его .
РЕДАКТИРОВАТЬ: Хорошо, так что поцарапайте кажущуюся интеграцию с IIS ... ОДНАКО, вот статья о том, как интегрироваться в IIS . Вы также можете рассмотреть Iron Python как дистрибутив для Windows.
Для провайдера, я бы сомневался, что им нужно знать больше, чем о платформе веб-разработки, такой как ASP / ASP.NET, и о том, что Python - это язык, используемый для его разработки.
Что касается установки, о которой я упоминал выше, я собираюсь попробовать это и посмотреть, как это происходит. Я буду публиковать заметки об этом, если я получу это работает нормально!
источник