mod_wsgi

Hosting aplikacji napisanych za pomocą Pythonowych frameworków ww obsługujących standard WSGI z wykorzystaniem serwera Apache i modułu mod_wsgi

mod_wsgi to zalecany obecnie moduł dla serwera Apache umożliwiający serwowanie zgodnych ze specyfikacją WSGI aplikacji www napisanych w Pythonie. Moduł napisany jest w C, a jego celem jest wydajniejsza obsługa wspomnianych aplikacji niż porzucony już mod_python i CGI. Pod systemami Uniksowymi można stosować jednowątkowy MPM "prefork" lub wielowątkowy "worker". W odróżnieniu od mod_python moduł wsgi daje domyślnie każdej aplikacji oddzielny sub-interpreter pythona, co zapobiega interferencji między aplikacjami. Posiada też opcję przeładowywania interpreterów zamiast restartowania całego serwera. Na stronie projektu znajdziemy dokumentację dla różnych frameworków i aplikacji www napisanych w Pythonie.

Instalacja Linux/Unix

Moduł powinien znajdować się w repozytoriach każdej ze współczesnych dystrybucji Linuksa. Jeżeli go brakuje to pobieramy kod źródłowy z repozytorium:
svn checkout http://modwsgi.googlecode.com/svn/trunk/ modwsgi
Kompilujemy i instalujemy:
./configure
make
make install
Gotowe. Moduł można już wykorzystać.

Test mod_wsgi

Utwórz plik hello.py o kodzie:
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
W konfiguracji apache ustaw:
LoadModule wsgi_module               modules/mod_wsgi.so
WSGIScriptAlias / /ścieżka/do/hello.py
Teraz po uruchomieniu serwera pod adresem http://localhost/ powinieneś zobaczyć "Hello World!", co oznacza iż moduł działa poprawnie.

Przykładowa konfiguracja dla Django

Oto fragment konfiguracji serwera Apache dla aplikacji Django (w tym przypadku mojej Biblioteki)
Alias /site_media/ "/home/piotr/svn/biblioteka/site_media/"
LoadModule wsgi_module               modules/mod_wsgi.so


<Directory /home/piotr/svn/biblioteka/site_media>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias / /home/piotr/svn/biblioteka/mysite.wsgi

<Directory /home/piotr/svn/biblioteka>
Order deny,allow
Allow from all
</Directory>
mysite.wsgi:
import os, sys
sys.path.append('/home/piotr/svn/biblioteka/')
# moja applikacja wymaga dodania dodatkowych katalogow do pythonpath
sys.path.append('/home/piotr/svn/biblioteka/diamandas/')
sys.path.append('/home/piotr/svn/biblioteka/diamandas/cbcplugins/cbcplugins/')
sys.path.append('/home/piotr/svn/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()
Gdzie /home/piotr/svn/biblioteka/ to ścieżka do projektu django.
blog comments powered by Disqus

Kategorie

Strony