mod_wsgi
14 July 2008
Comments
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
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]
LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /ścieżka/do/hello.py
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>
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()
RkBlog
Comment article