Jeśli masz problem z używaniem usług IIS, użyj PyISAPIe zamiast CGI, jeśli możesz. Instrukcje i linki do PyISAPIe są poniżej. Twój hosting będzie wiedział dużo więcej o rozszerzeniach ISAPI, jeśli będą zarządzać usługami IIS niż o Pythonie, i nie będzie musiał wiele wiedzieć o Pythonie za pomocą PyISAPIe.
DUŻO LEPSZY SPOSÓB WYKORZYSTANIA TO ZA POMOCĄ PyISAPIE, ROZSZERZENIA ISAPI . PyISAPIe jest znacznie szybszy niż CGI na IIS7. To działa podobnie do mod_python na Apache. Strona główna projektu PyISAPIe zawiera instrukcje dotyczące konfigurowania Django z WSGI przez PyISAPIe. Spowoduje to zwiększenie wydajności do rozsądnych prędkości dla witryny publicznej / o dużym natężeniu ruchu.
Konfiguracja Django w Pythonie IIS + za pośrednictwem środowiska CGI będzie strasznie powolna w przypadku dowolnego zastosowania produkcyjnego. Nigdy nie należy tego używać w przypadku witryny, w której oczekuje się obsługi więcej niż kilku żądań na minutę. Ogranicza to również poważnie to, co można buforować w pamięci w ramach buforowania Django, ponieważ proces aplikacji Django jest restartowany przy każdym nowym żądaniu.
Na zdrowym serwerze WWW, takim jak Apache, lighttpd itp., Z mod_python interpreter Pythona uruchamiający proces Django pozostaje w pamięci i jest inicjowany z każdym nowym wątkiem roboczym Apache, który obsługuje wiele żądań w miarę upływu czasu. Oznacza to, że Python + Django nie jest zamykany i restartowany dla każdego nowego żądania. W konfiguracji FastCGI serwer WWW (na przykład Apache lub lighttpd) tworzy gniazdo (domena UNIX lub TCP), przez które komunikuje się z aplikacją FastCGI (twoją aplikacją internetową Django) za pośrednictwem protokołu FastCGI. To samo dotyczy konfiguracji proxy HTTP (mówią HTTP zamiast FastCGI). W środowisku CGI wywoływany jest interpreter Pythona, który uruchamia aplikację Django, całkowicie od nowa dla każdego żądania, więc aplikacja nie może utrzymywać stanu między żądaniami w pamięci i nie może buforować poprawnie nigdzie poza bazą danych.
Dość rantingu, jeśli musisz użyć IIS + CGI + Django, oto jak wykonać tę okropną okropną rzecz: Użyj następującego kodu, aby utworzyć własny skrypt CGI, który uruchamia twoją aplikację Django (tłumaczy między CGI a WSGI). Musisz trochę zmodyfikować skrypt, aby wskazywał na Twoją aplikację i kod Django. To jest skrypt CGI, do którego musisz przekazywać żądania. Następnie musisz przekazać / przepisać wszystkie żądania do skryptu CGI ...
W IIS6 będziesz potrzebować odpowiednika mod_rewrite, takiego jak IISRewrite, który moim zdaniem nie jest darmowy i jest zamkniętym źródłem. W ramach IIS7 Microsoft w końcu dołączył moduł przepisywania adresów URL. Dokumentacja do tego znajduje się tutaj . Instrukcje tworzenia reguł przepisywania w IIS7 są tutaj . Będziesz chciał przekazać wszystko pod docelowym podstawowym adresem URL do obsługi przez skrypt CGI.
Jak skonfigurować Python na FastCGI na IIS
Oto, jak skonfigurować Python na FastCGI IIS 7+ z, otwiera drogę do przyzwoitej konfiguracji DJango
... i być w stanie podłączyć debugera do procesu, umożliwiając przejście przez kod Pythona
W tym przykładzie nie użyto konsoli zarządzania IIS, ale wymieniono zawartość wynikowych plików konfiguracji
Krok 1
Zainstaluj Python + dobry debugger (w tym przykładzie użyto WingIDE, które znalazłem doskonałe narzędzie) W tym przykładzie założono folder c: \ python27
Krok 2
Utwórz folder internetowy, np. Na localhost c: \ inetpub \ wwwroot \ mypythonfolder i umieść w nim następujący plik web.config:
Uwaga | znak potoku w dyrektywie scriptProcessor. Jest to używane przez IIS do mapowania skryptu na aplikację fastCgi (krok 3). Powinien pasować znak po znaku pełna ścieżka + znak potoku + ustawienia argumentów z kroku 3 poniżej.
Krok 3
W pliku applicationHost.config w folderze c: \ windows \ system32 \ inetsrc \ config umieść w sekcji:
Krok 4
W c: \ python27 \ lib \ mylib \ myfcgi.py wstaw następujący kod:
import os, io, sys ret = "środowisko: \ r \ n" dla param w os.environ.keys (): ret = ret + "% s =% s \ r \ n"% (param, os.environ [ param]) ret = ret + "\ r \ nArgs:" for arg in sys.argv: ret = ret + arg uchwyt = io.open ("c: \ temp \ myfcgi.log", 'wb') handle.write (ret) handle.close ()
Krok 5
Upewnij się, że IUSR ma prawa do zapisu w twoim folderze c: \ temp
Krok 6
Umieść wingdbstub.py i wingdebugpw w folderze c: \ python27 \ lib \ mylib \. Umożliwi to debugowanie w Wingide. Te pliki są dostarczane wraz z instalacją skrzydła. Uwaga: jeśli Python musi również skompilować kod do wingstub.pyc, IUSR potrzebuje praw do zapisu w tym folderze, ponieważ proces python zostanie uruchomiony na tym koncie przez IIS
Krok 6
Otwórz wingdb i ustaw punkt przerwania w linii „import os, io, sys”
Krok 7
Kliknij w przeglądarce http: // localhost / mypythonfolder
Jeśli wszystko działa poprawnie, należy teraz uruchomić Wingide, aby wyświetlić działający kod w punkcie przerwania. Jeśli nie: - istnieje problem z zaporą ogniową. Proces python komunikuje się z interfejsem WingIDE przez połączenie TCP - lub występuje problem z bezpieczeństwem w Wingide. Potrzebuje odpowiedniej wersji pliku wingdebugpw, który zasadniczo zawiera hasło lub token, który weryfikuje dostęp do twojej instalacji wingide. Gdyby tak nie było, każdy, kto ma dostęp tcp do twojego komputera, mógłby debugować kod.
Krok 8
Sprawdź, czy w c: \ temp plik dziennika został utworzony. Powinno to również działać, jeśli nie możesz rozpocząć kroku 7
Krok 9
Zauważ, że ta strona uruchamia debugger, ale nie zwraca żadnej strony do przeglądarki. Trochę tła: serwer sieciowy komunikuje się fastcgi poprzez tak zwane „rekordy”. Oznacza to, że każde żądanie użytkownika przychodzi do aplikacji spakowane w wielu osobnych „rekordach”. Każdy rekord jest strukturą danych, która wskazuje początek żądania, kwerendę, zmienne pocztowe itp. Rozpakowanie tych rekordów do pojedynczego żądania jest dość kłopotliwe, postępuje zgodnie ze specyfikacją fastcgi http: //www.fastcgi .com / devkit / doc / fcgi-spec.html # S1
Jako zawartość c: \ python27 \ lib \ mylib \ myfcgi.py właśnie wrzuciłem kopię pliku zoofcgi.py dostarczonego przez helicontech. Ten plik python jest w stanie dekodować te rekordy i wyświetlać stronę i jest całkiem interesujący do debugowania. Zauważ też, że helicontech opcjonalnie dostarcza dll, który znajduje się pomiędzy IIS a zoofcgi.py, ale ta dll nie jest absolutnie konieczna. Wierzę, że implementuje nieco ulepszoną i ogólną wersję implementacji fastcgi, którą zapewnia msft. Jednak gdy używasz ich biblioteki dll, gdy chcesz przejść przez kod, proces zostaje dość szybko zakończony, a biblioteka IIS / DLL zabija proces Pythona, gdy stwierdza, że odpowiedź nie wraca w ciągu sekundy lub 2.
Otóż to. Zasadniczo komunikacja między IIS a kodem Pythona odbywa się za pomocą nazwanych potoków. Powinieneś być w stanie skonfigurować go za pomocą gniazd Tcp, ale nie byłem w stanie dowiedzieć się, który port jest używany (uważam, że stdin powinien zostać przekształcony w port, który można następnie wybrać () ed, ale tego nie dałem każda próba)
źródło
Nie próbowałem tego z Pythonem, ale działało świetnie jako CGI z Perlem. Produkty ActiveState bez trudu integrują się z IIS. Miałem wielki sukces z ActivePerl. Mają także ActivePython, który może (prawdopodobnie) również załatwi sprawę . Więc myślę, że po prostu pobierz Django i zainstaluj go .
EDYCJA: Ok, więc zarysuj pozorną integrację z IIS ... JEDNAK, oto artykuł o tym, jak zintegrować z IIS . Możesz również rozważyć Iron Python jako swoją dystrybucję dla systemu Windows.
W przypadku dostawcy wątpiłbym, aby musieli wiedzieć więcej niż jest to platforma programistyczna, taka jak ASP / ASP.NET, i że Python jest językiem używanym do jej tworzenia.
Jeśli chodzi o instalację, o której wspomniałem powyżej, spróbuję tego i zobaczę, jak sobie poradzi. Zamieszczę na nim notatki, jeśli zadziała poprawnie!
źródło