Pomoc - Konfiguracja WSGI
W panelu administracyjnym przy dodawaniu aplikacji na liście frameworków znajduje się "Aplikacja WSGI". Dzięki niej masz możliwość uruchomienia aplikacji opartych o WSGI, które nie są napisane w żadnym ze wspieranych przez nas frameworków Pythona. Aplikacje uruchamiane są przez wrapper FastCGI-WSGI wykorzystujący Flupa. Ponieważ konfiguracja z założenia ma być uniwersalna i pasująca do wielu projektów musieliśmy narzucić pewne nazewnictwo: skrypt inicjalizujący powinien nazywać się init.wsgi a pliki statyczne powinny być umieszczone w katalogu static (na ten katalog ustawiony jest DOCUMENT_ROOT). Pliki statyczne serwowane są na prawach grupy więc upewnij się, że mają ustawione prawo do odczytu dla grupy a katalog aplikacji i static prawo wykonywalności dla grupy.
Skrypt init.wsgi musi umieścić w zmiennej application obiekt wspierający interfejs WSGI.
Aplikacje WSGI są domyślnie uruchamiane w modelu wielowątkowym. Jeżeli chcesz korzystać z modelu prefork ustaw w pliku .environment zmienną WSGI_NO_THREADS=1. W takiej konfiguracji do obsługi każdego żądania będzie dynamicznie uruchamiany nowy proces.
Przykładem takiej aplikacji WSGI może być DoItSimple. Aby uruchomić ją na naszym serwerze konieczne jest utworzenie dwóch linków w katalogu aplikacji
ln -s doitsimple/index.py init.wsgi ln -s doitsimple/static/ static
Skrypt index.py z tej aplikacji wygląda następująco:
# Example index.py file
def wsgi_callable_object(environ, start_response):
start_response('200 OK',
[('Content-Type','text/plain'),('Cache-Control','max-age=0')])
return ['Hello, I\'m simple wsgi app']
application=wsgi_callable_object
# End of example DoItSimple fileDrugi przykład DoItSophisticated
ln -s doitsophisticated/index.py init.wsgi ln -s doitsophisticated/static/ static
Zawartość pliku index.py
class Sophisticated(object):
def __init__(self, debugit, max_age, text):
object.__init__(self)
self.__debugit=False
self.__max_age=max_age
self.__text=text
def __call__(self, environ, start_response):
if self.__debugit:
start_response('200 OK', [('Content-Type','text/plain')])
return ['Debugging not implemented yet!']
start_response('200 OK',
[('Content-Type','text/plain'),('Cache-Control','max-age='+str(self.__nax_age))])
return [self.__text]
application=Sophisticated(True,0,'Hello, I\'m simple wsgi app')
# End of example DoItSophisticated fileOstatnim krokiem jest dodanie aplikacji w panelu administracyjnym (nie zapomnij o dodaniu domeny).