Zope§
要使用 Unit 运行使用 Zope Web 框架构建的应用
使用 Python 3.6+ 语言模块安装 Unit。
安装 Zope。在此,我们在 /path/to/app/ 处执行此操作;在配置中使用真实路径。
首先,安装 Zope 的 核心文件,例如
$ pip install -U pip wheel zc.buildout $ cd /path/to/app/ $ wget https://pypi.ac.cn/packages/source/Z/Zope/Zope-A.B.C.tar.gz $ tar xfvz Zope-A.B.C.tar.gz --strip-components=1 $ buildout
接下来,添加一个名为 /path/to/app/wsgi.cfg 的新配置文件
[buildout] extends = buildout.cfg parts += wsgi.py [wsgi.py] recipe = plone.recipe.zope2instance user = admin:admin zodb-temporary-storage = off eggs = scripts = initialization = from Zope2.Startup.run import make_wsgi_app wsgiapp = make_wsgi_app({}, '${buildout:parts-directory}/wsgi.py/etc/zope.conf') def application(*args, **kwargs):return wsgiapp(*args, **kwargs)
它创建一个新的 Zope 实例。该部分的名称必须以 .py 结尾,以便将生成的实例脚本识别为 Python 模块;initialization 选项 定义一个 WSGI 入口点。
重新运行 Buildout,向其提供新的配置文件
$ buildout -c wsgi.cfg ... Installing wsgi.py. Generated script '/path/to/app/bin/wsgi.py'.
这样创建的实例脚本可与 Unit 一起使用。
运行以下命令,以便 Unit 可以访问 应用程序目录
# chown -R unit:unit /path/to/app/
有关更多详细信息,包括权限,请参阅 安全检查清单。
最后,准备 Zope 配置以供 Unit 使用(对 path 使用真实值)
{ "listeners": { "*:80": { "pass": "applications/zope" } }, "applications": { "zope": { "type": "python 3", "path": "/path/to/app/", "module": "bin.wsgi" } } }
创建一个虚拟环境来安装 Zope 的 PIP 包
$ cd /path/to/app/ $ python3 --version Python 3.Y.Z $ python3 -m venv venv $ source venv/bin/activate $ pip install 'zope[wsgi]' $ deactivate
警告
使用与步骤 1 中语言模块匹配的 Python 版本(本例中为 3.Y)创建虚拟环境。此外,单元配置中的应用程序 类型必须 解析 为类似的匹配版本;单元不会从环境中推断它。
安装后,创建 Zope 实例
$ venv/bin/mkwsgiinstance -d instance
要在单元上运行实例,请创建一个 WSGI 入口点
from pathlib import Path from Zope2.Startup.run import make_wsgi_app wsgiapp = make_wsgi_app({}, str(Path(__file__).parent / 'etc/zope.conf')) def application(*args, **kwargs):return wsgiapp(*args, **kwargs)
将脚本另存为实例主目录中的 wsgi.py(此处为 /path/to/app/instance/)。
运行以下命令,以便 Unit 可以访问 应用程序目录
# chown -R unit:unit /path/to/app/
有关更多详细信息,包括权限,请参阅 安全检查清单。
最后,准备 Zope 配置以供单元使用(对 路径和 主目录使用实际值)
{ "listeners": { "*:80": { "pass": "applications/zope" } }, "applications": { "zope": { "type": "python 3.Y", "path": "/path/to/app/instance/", "home": "/path/to/app/venv/", "module": "wsgi" } } }
上传更新后的配置。假设上述 JSON 已添加到
config.json
# curl -X PUT --data-binary @config.json --unix-socket \ /path/to/control.unit.sock http://localhost/config/
成功更新后,Zope 实例应可在侦听器的 IP 地址和端口上使用
$ curl http://localhost <!DOCTYPE html> <html> <head> <base href="http://localhost/" /> <title>Auto-generated default page</title> <meta charset="utf-8" /> </head> <body> <h2>Zope Auto-generated default page</h2> This is Page Template <em>index_html</em>. </body> </html>