Как объяснить установку Django / Python новичку в Python, использующему общий сервер IIS [закрыто]

По независящим от меня причинам наш веб-сайт размещен у хостинг-провайдера, который использует IIS для своих серверов. В настоящее время они предлагают PHP и ASP, а также Python и Perl через cgi-скрипты.

Я хочу изменить дизайн, переписать наш веб-сайт и перейти с PHP на установку Python / Django. Хостинг-провайдер открыт для предложений, но четко заявляет: «Мы действительно не знаем, что такое Python и как он работает, но если вы можете объяснить это нам, мы постараемся настроить вас на все, что вам нужно». .

Тем не менее, я мог бы знать, как настроить Django в среде общего хостинга на apache / mod_python, но я понятия не имею, как он будет настроен на IIS, и уж тем более не знаю, как он будет настроен для общего хостинга. среда. Я немного погуглил, но большинство ресурсов, которые я нахожу, предполагают, что системный администратор 1) знает Python / Django и 2) использует выделенный хостинг IIS для своего сайта.

Может ли кто-нибудь объяснить, как я могу объяснить процесс своему хостинг-провайдеру, или дать мне указатели на хорошие, подробные ресурсы, которые я могу направить своему хостинг-провайдеру? Имейте в виду, что люди, управляющие хостингом, могут знать «все» о IIS, но не имеют представления, как работать с Python.

9
задан 20 August 2009 в 15:34
3 ответа

Если Вы застреваете с использованием IIS, используйте PyISAPIe вместо CGI, если Вы можете. Инструкции и ссылки для PyISAPIe ниже. Ваш веб-хост будет знать намного больше о расширениях ISAPI, если они будут управлять IIS, чем о Python, и они не должны знать много о Python с PyISAPIe.

НАМНОГО ЛУЧШИЙ СПОСОБ СДЕЛАТЬ ЭТО ИСПОЛЬЗУЕТ PyISAPIe, AN РАСШИРЕНИЕ ISAPI. 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.

8
ответ дан 2 December 2019 в 22:33
  • 1
    Так как хостинг совместно используется, основной вопрос - то, как поставщик услуг хостинга настроил бы PyISAPIe для установки моим потребностям и также различным потребностям их других клиентов. Я couldn' t находят инструкции для установки Django с WSGI на домашней странице... Если все остальное перестало работать, I' ll просто используют подход CGI. Меньше чем с 400 запросами на 110-недельный , я думаю, что мы можем жить с решением CGI, пока мы не решаем переключить хостинг. –  Epcylon 3 June 2009 в 22:08

Я не попробовал это Python, но он работал отлично как CGI с Perl. Продукты ActiveState интегрируются беспрепятственно с IIS. Я имел большой успех с ActivePerl. У них также есть ActivePython, который мог бы (вероятно), также добиваться цели там. Затем я думаю, что Вы просто загрузили бы Django, устанавливают его.

Править: Хорошо, так поцарапайте бесшовную интеграцию с IIS... ОДНАКО вот статья о том, как интегрироваться в IIS. Вы могли бы также рассмотреть Iron Python как свой дистрибутив для поля Windows.

Для поставщика я сомневался бы, что они должны знать больше, чем это - платформа веб-разработки как ASP / ASP.NET и который Python является языком, используемым для разработки с ним.

До установки, которую я упоминаю выше, я собираюсь попробовать это и видеть, как она тарифицирует. Я отправлю примечания по нему, если я получу его работающий хорошо!

0
ответ дан 2 December 2019 в 22:33

Как настроить Python на FastCGI на IIS

Вот как настроить Python на FastCGI IIS 7+, открыв путь для достойной настройки DJango

... и будь возможность подключить отладчик к процессу, позволяя вам пошагово выполнять свой код Python

В этом примере не используется консоль управления IIS, но перечисляется содержимое полученных файлов конфигурации

Шаг 1

Установите Python + a хороший отладчик (в этом примере используется WingIDE, который я нашел отличным инструментом) В этом примере предполагается, что папка c: \ python27

. Шаг 2

Создайте веб-папку, например, на локальном хосте c: \ inetpub \ wwwroot \ mypythonfolder, и поместите в нее следующий файл web.config:

Обратите внимание на | вертикальная черта в директиве scriptProcessor. Это используется IIS для сопоставления сценария с приложением fastCgi (шаг 3). Он должен посимвольно соответствовать параметрам полного пути + вертикальной черты + аргументов из шага 3.

Шаг 3

В файле applicationHost.config в папке c: \ windows \ system32 \ inetsrc \ config поместите следующее в папку section:

    <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 = "среда: \ r \ n" для параметра в os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (параметр, os.environ [параметр]) 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-соединение. - или есть проблема с безопасностью внутри крыла. Ему нужна соответствующая версия файла 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 должен быть преобразован в порт, который затем можно выбрать () ed, но я не дал этого любая попытка)

1
ответ дан 2 December 2019 в 22:33

Теги

Похожие вопросы