我们正在为我们的productoin-Plone部署从一个Zope实例切换到两个。我定义了以下构建结构:
buildout.cfg
[buildout]
extends = app.cfg
... some environment specific stuff
app.cfg
[buildout]
extends = base.cfg
parts =
zope2
productdistros
instance1
instance2
zopepy
supervisor
[instance1]
<= instance
http-address = 18081
[instance2]
<= instance
http-address = 18082
基本.cg
[buildout]
parts =
zope2
productdistros
instance
zopepy
... bulk of buildout configuration suitable for both server and development
在测试这一点时,我希望这个构建配置会导致现有的实例部分被删除,并用instance1和instance2替换。然而,实例部分并没有被删除——它仍然可以在bin和parts目录中找到。
[zopetest@dev home]$ bin/buildout
Updating zope2.
Updating fake eggs
Updating productdistros.
Updating instance1.
Updating instance2.
Updating instance.
Updating zopepy.
Updating supervisor.
我在一个不同的zope实例上有一个非常相似的设置,从一开始就是这样配置的,它没有"实例"部分。
我们正在运行zc.buildout 1.4.4,Python 2.4.6构建Plone 3.3.6。
我尝试了以下内容,但没有更改:*升级到buildout 1.5.2*从base.cfg 中删除零件分配
这是plone.recipe.zope2instance的一个"特性"。传统上,该配方避免删除它为运行plone创建的实例和脚本(无论出于何种原因:要么是糟糕的设计,要么是深思熟虑的决定,我不确定)。
不管它有什么价值,从4.2.0版本开始,它支持生成非plone脚本(类似于zc.recipe.egg),并且这些脚本得到了正确的管理。参见:
- https://github.com/plone/plone.recipe.zope2instance/blob/master/src/plone/recipe/zope2instance/init.py#L119
所有血腥的细节。(我认为"特性"是安装方法不会返回元组,除非您使用脚本,在这种情况下会返回包含脚本的元组。)
这实际上是由于zc.buildout自动零件选择功能
当通过变量替换或初始化配方引用带有配方的部分时,该部分被视为一个零件,并在引用零件之前添加到零件列表中
我有以下部分
[zopepy]
# For more information on this step and configuration options see:
# http://pypi.python.org/pypi/zc.recipe.egg
recipe = zc.recipe.egg
eggs = ${instance:eggs}
由于它引用了"实例"部分,"实例"包含在零件列表中。
为了修复,我将其更改为复制粘贴实例的鸡蛋值
eggs =
Plone
${buildout:eggs}
然后运行bin/buildout