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 file

Drugi 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 file

Ostatnim krokiem jest dodanie aplikacji w panelu administracyjnym (nie zapomnij o dodaniu domeny).