Repoze vereinigt verschiedene Technologien um WSGI und Zope zu verbinden.
Python-Standard (PEP 333), der die Kommunikation zwischen Web-Servern und Web-Anwendungen spezifiziert.
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.
geben Antworten zurück.
Anwendung, die die nächste Anwendung aufruft, wobei die funktionale Anordnung eine sog. Pipeline bildet.
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).
[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
Siehe auch