- WSGI
Python-Standard (PEP 333), der die Kommunikation zwischen Web-Servern und Web-Anwendungen spezifiziert.
- Server
akzeptieren Anfragen eines Browser/Client und reichen die Daten an die Anwendungen weiter.
Sie antworten auf Anfragen, wobei sie die von Anwendungen zurückgelieferten Daten verwenden.
- Anwendungen
- geben Antworten zurück.
- Middleware
- Anwendung, die die nächste Anwendung aufruft, wobei die funktionale Anordnung eine sog. Pipeline bildet.
- Repoze
ermöglicht Zope in einer WSGI-Umgebung zu nutzen oder umgekehrt anderen WSGI-Anwendungen Zope-Technologien als Middleware bereitzustellen.
Dabei besteht Repoze einerseits aus einer Reimplementierung von Zope-Funktionalitäten als Python-Bibliotheken und WSGI-Middleware, andererseits aus bestehender WSGI-Middleware (Paste).
- Beispiel
[buildout] extends = http://dist.plone.org/release/4.1-latest/versions.cfg parts = instance paster wsgiconfig [instance] recipe = plone.recipe.zope2instance eggs = Plone PIL user = admin:admin [paster] recipe = zc.recipe.egg eggs = ${instance:eggs} Paste PasteScript repoze.tm2 repoze.retry script = paster [wsgiconfig] recipe = collective.recipe.template input = inline: [app:zope] use = egg:Zope2#main zope_conf = ${buildout:directory}/parts/instance/etc/zope.conf [pipeline:main] pipeline = egg:paste#evalerror egg:repoze.retry#retry egg:repoze.tm2#tm zope [server:main] use = egg:paste#http host = localhost port = 8000 output = ${buildout:directory}/zope2.ini
Die Buildout-Konfiguration nutzt umfangreich Ian Bicking’s Paste, speziell PasteDeploy, das eine deklarative Syntax zum Konfigurieren von WSGI-Pipelines bereitstellt.
Zope2 kann nun einfach gestartet werden mit:
$ ./bin/paster serve zope2.ini
Anmerkung 1: infrae.wsgi scheint eine sauberere und besser dokumentierte Lösung zu sein im Vergleich zu repoze.zope2 und dem neuen Zope2 WSGI publisher. Um ìnfrae.wsgi zu verwenden, tragen Sie einfach im [wsgiconfig]-Abschnitt stattdessen folgendes ein:
use = egg:infrae.wsgi#zope2
Anmerkung 2: Soll ein anderer Web-Server wie z.B. gunicorn verwendet werden, so kann einfach im Abschnitt [server:main] stattdessen folgendes eingetragen werden:
use = egg:gunicorn#main