Deployment 在生产环境中部署后重新加载Zope/Plone代码

Deployment 在生产环境中部署后重新加载Zope/Plone代码,deployment,plone,continuous-deployment,zope,zodb,Deployment,Plone,Continuous Deployment,Zope,Zodb,在生产过程中,有没有一种方法可以在不重新启动Zope的情况下重新加载代码? 新功能几乎每两天实施一次,并且必须上载到服务器。当前它工作的唯一方法是重新启动zeo服务器和所有实例。无法使用“plone.reload”,因为它仅在调试模式打开时在开发环境中工作。下面是buildout.cfg的内容 [buildout] parts = # instance zeo client1 client2 client3

在生产过程中,有没有一种方法可以在不重新启动Zope的情况下重新加载代码? 新功能几乎每两天实施一次,并且必须上载到服务器。当前它工作的唯一方法是重新启动zeo服务器和所有实例。无法使用“plone.reload”,因为它仅在调试模式打开时在开发环境中工作。下面是buildout.cfg的内容

[buildout]


  parts =
#    instance
        zeo
        client1
        client2
        client3
        zopepy
        zopeskel
        test
#    mysql
#    varnish-build
#    varnish
    supervisor
    pidproxy

extends =
    https://dist.plone.org/versions/zope-2-13-19-versions.cfg
find-links =
    https://dist.plone.org/release/4.2.4
    https://dist.plone.org/thirdparty
extensions =
    mr.developer
#    buildout.dumppickedversions
sources = sources
versions = versions
develop =

[versions]
plone.recipe.zeoserver = 1.3.1
plone.recipe.zope2instance = 4.2.8
five.localsitemanager = 2.0.5
Products.PluginRegistry = 1.3
Products.CMFCore = 2.2.7
Products.GenericSetup = 1.7.3
Products.ZSQLMethods = 2.13.4
zope.interface = 3.6.7
zope.app.publication = 3.12.0
#setuptools = 17.1.1
funcsigs = 0.4
openpyxl = 2.4.0
plone.reload = 2.0.2

[zeo]
recipe = plone.recipe.zeoserver
zeo-address = 127.0.0.1:9100
zeo-var = ${buildout:directory}/var
blob-storage = ${zeo:zeo-var}/blobstorage
#ggs = plone.app.blob

[client1]
recipe = plone.recipe.zope2instance
http-address = 9081
zeo-client = on
zeo-address =  ${zeo:zeo-address}
shared-blob = on
blob-storage =  ${zeo:zeo-var}/blobstorage
user = admin:Slick_RP@21!
products = ${buildout:directory}/matrix_git/prod/
debug-mode = off
verbose-security = off
eggs =
#    pillow
    mysql-python
    simplejson
    haversine
    openpyxl
    requests
    httpagentparser
    ordereddict
    python-memcached
#    python-crontab
#   setuptools
    Products.CMFCore
    Products.ZMySQLDA
#    Products.SQLAlchemyDA
    Products.PluggableAuthService
#    Products.ZopeProfiler
#    Products.MemoryProfiler
#    reportlab
    Products.BeakerSessionDataManager
    collective.fsexternalmethod
    plone.reload
zope-conf-additional =
    extensions ${buildout:directory}/matrix_git/Extensions
    <product-config beaker>
        session.type            file
        session.data_dir        ${buildout:directory}/var/sessions/data
        session.lock_dir        ${buildout:directory}/var/sessions/lock
        session.key             beaker.session
        session.secret          secret
    </product-config>
zcml =
    collective.fsexternalmethod
    plone.reload
event-log-max-size = 5 MB
event-log-old-files = 5
access-log-max-size = 20 MB
access-log-old-files = 10

[client2]
recipe = plone.recipe.zope2instance
http-address = 9082
zeo-client = ${client1:zeo-client}
zeo-address = ${client1:zeo-address}
blob-storage = ${client1:blob-storage}
shared-blob = ${client1:shared-blob}
user = ${client1:user}
products = ${client1:products}
debug-mode = off
verbose-security = off
eggs = ${client1:eggs}
zcml = ${client1:zcml}
zope-conf-additional = ${client1:zope-conf-additional}
event-log-max-size = ${client1:event-log-max-size}
event-log-old-files = ${client1:event-log-old-files}
access-log-max-size = ${client1:access-log-max-size}
access-log-old-files = ${client1:access-log-old-files}

[client3]
recipe = plone.recipe.zope2instance
http-address = 9083
zeo-client = ${client1:zeo-client}
zeo-address = ${client1:zeo-address}
blob-storage = ${client1:blob-storage}
shared-blob = ${client1:shared-blob}
user = ${client1:user}
products = ${client1:products}
debug-mode = off
verbose-security = off
eggs = ${client1:eggs}
zcml = ${client1:zcml}
zope-conf-additional = ${client1:zope-conf-additional}
event-log-max-size = ${client1:event-log-max-size}
event-log-old-files = ${client1:event-log-old-files}
access-log-max-size = ${client1:access-log-max-size}
access-log-old-files = ${client1:access-log-old-files}
[zopepy]
recipe = zc.recipe.egg
eggs = ${client1:eggs}
interpreter = zopepy
scripts = zopepy

[test]
recipe = zc.recipe.testrunner
defaults = ['--auto-color', '--auto-progress']
eggs =
    ${client1:eggs}

[zopeskel]
recipe = zc.recipe.egg
eggs =
    ZopeSkel
    PasteScript

[mysql]
recipe = zest.recipe.mysql
# Note that these urls usually stop working after a while... thanks...
mysql-url = http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.86.tar.gz
mysql-python-url = http://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.3.tar.gz

[varnish-build]
recipe = zc.recipe.cmmi
url = ${varnish:download-url}

[varnish]
recipe = plone.recipe.varnish
daemon = ${buildout:parts-directory}/varnish-build/sbin/varnishd
bind = 127.0.0.1:8000
backends = 127.0.0.1:8080
cache-size = 50M

[pidproxy]
recipe = zc.recipe.egg
eggs = supervisor
scripts = pidproxy

[supervisor]
recipe = collective.recipe.supervisor
port = 127.0.0.1:24007
serverurl = http://127.0.0.1:24007
programs =
#    10 mysql      ${buildout:directory}/bin/pidproxy [${buildout:directory}/var/mysql/mysql.pid ${buildout:directory}/parts/mysql/install/bin/mysqld_safe --pid-file=${buildout:directory}/var/mysql/mysql.pid --socket=${buildout:directory}/var/mysql.socket] ${buildout:directory} true
    20 zeo       ${buildout:directory}/bin/zeo [console] ${buildout:directory} true
    30 client1   ${buildout:directory}/bin/client1 [console] ${buildout:directory} true
    40 client2   ${buildout:directory}/bin/client2 [console] ${buildout:directory} true
    50 client3   ${buildout:directory}/bin/client3 [console] ${buildout:directory} true
[buildout]
零件=
#实例
泽奥
客户1
客户2
客户3
佐佩佩
佐佩斯克尔
测试
#mysql
#清漆构建
#清漆
监督人
pidproxy
延伸=
https://dist.plone.org/versions/zope-2-13-19-versions.cfg
查找链接=
https://dist.plone.org/release/4.2.4
https://dist.plone.org/thirdparty
扩展=
发展商先生
#buildout.dumppickedversions
来源=来源
版本=版本
发展=
[版本]
plone.recipe.zeoserver=1.3.1
plone.recipe.zope2实例=4.2.8
five.localsitemanager=2.0.5
Products.PluginRegistry=1.3
Products.CMFCore=2.2.7
Products.GenericSetup=1.7.3
Products.ZSQLMethods=2.13.4
zope.interface=3.6.7
zope.app.publication=3.12.0
#setuptools=17.1.1
funcsigs=0.4
openpyxl=2.4.0
plone.reload=2.0.2
[zeo]
recipe=plone.recipe.zeoserver
zeo地址=127.0.0.1:9100
zeo var=${buildout:directory}/var
blob存储=${zeo:zeo var}/blob存储
#ggs=plone.app.blob
[客户1]
配方=plone.recipe.zope2实例
http地址=9081
zeo客户机=on
zeo地址=${zeo:zeo地址}
共享blob=on
blob存储=${zeo:zeo var}/blob存储
user=admin:Slick_RP@21!
products=${buildout:directory}/matrix\u git/prod/
调试模式=关闭
详细安全性=关闭
蛋=
#枕头
mysql python
辛普莱克森
哈弗森
openpyxl
请求
httpagentparser
有序的
python内存缓存
#python crontab
#设置工具
Products.CMFCore
Products.ZMySQLDA
#Products.SQLAlchemyDA
Products.PluggableAuthService
#产品名称:ZopeProfiler
#产品.存储器驱动器
#报告实验室
Products.BikerSessionDataManager
collective.fsexternalmethod
重装
zope conf附加=
扩展${buildout:directory}/matrix\u git/extensions
session.type文件
session.data_dir${buildout:directory}/var/sessions/data
session.lock_dir${buildout:directory}/var/sessions/lock
会话。钥匙烧杯。会话
秘密
zcml=
collective.fsexternalmethod
重装
事件日志最大大小=5 MB
事件日志旧文件=5
访问日志最大大小=20 MB
访问日志旧文件=10
[客户2]
配方=plone.recipe.zope2实例
http地址=9082
zeo客户端=${client1:zeo客户端}
zeo地址=${client1:zeo地址}
blob存储=${client1:blob存储}
共享blob=${client1:shared blob}
user=${client1:user}
products=${client1:products}
调试模式=关闭
详细安全性=关闭
鸡蛋=${client1:eggs}
zcml=${client1:zcml}
zope conf-additional=${client1:zope conf-additional}
事件日志最大大小=${client1:event log max size}
事件日志旧文件=${client1:event log old files}
访问日志最大大小=${client1:access log max size}
访问日志旧文件=${client1:access log old files}
[客户3]
配方=plone.recipe.zope2实例
http地址=9083
zeo客户端=${client1:zeo客户端}
zeo地址=${client1:zeo地址}
blob存储=${client1:blob存储}
共享blob=${client1:shared blob}
user=${client1:user}
products=${client1:products}
调试模式=关闭
详细安全性=关闭
鸡蛋=${client1:eggs}
zcml=${client1:zcml}
zope conf-additional=${client1:zope conf-additional}
事件日志最大大小=${client1:event log max size}
事件日志旧文件=${client1:event log old files}
访问日志最大大小=${client1:access log max size}
访问日志旧文件=${client1:access log old files}
[zopepy]
配方=zc.recipe.egg
鸡蛋=${client1:eggs}
口译员=zopepy
脚本=zopepy
[测试]
配方=zc.recipe.testrunner
默认值=['--auto color','--auto progress']
蛋=
${client1:eggs}
[佐佩斯克尔]
配方=zc.recipe.egg
蛋=
佐佩斯克尔
手写体
[mysql]
recipe=zest.recipe.mysql
#请注意,这些URL通常会在一段时间后停止工作。。。谢谢
mysql url=http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.86.tar.gz
mysql python url=http://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.3.tar.gz
[清漆构建]
配方=zc.recipe.cmmi
url=${varnish:下载url}
[清漆]
配方=plone.recipe.varnish
守护进程=${buildout:parts目录}/varnish build/sbin/varnishd
绑定=127.0.0.1:8000
后端=127.0.0.1:8080
缓存大小=50M
[代理]
配方=zc.recipe.egg
蛋=主管
scripts=pidproxy
[主管]
配方=集体配方.recipe.supervisor
端口=127.0.0.1:24007
服务器URL=http://127.0.0.1:24007
节目=
#10 mysql${buildout:directory}/bin/pidproxy[${buildout:directory}/var/mysql/mysql.pid${buildout:directory}/parts/mysql/install/bin/mysqld_safe--pid file=${buildout:directory}/var/mysql.socket=${buildout:directory}/var/mysql.socket]${buildout:directory}true}
20 zeo${buildout:directory}/bin/zeo[console]${buildout:directory}true
30 client1${buildout:directory}/bin/client1[控制台]${buildout:directory}true
40 client2${buildout:directory}/bin/client2[控制台]${buildout:directory}true
50 client3${buildout:directory}/bin/client3[控制台]${buildout:directory}true

是的,有一种方法,尽管我在生产中从未这样做过在开发时,在浏览器视图中重新加载是一种非常节省时间的方法:

from plone.reload.code import reload_code
from Products.Five.browser import BrowserView


class View(BrowserView):

    def __call__(self):
        reload_code()
        return 'Code loaded.'

然后使用您在站点上注册的名称调用视图。当实例在后台运行时,这甚至可以在非调试模式下工作。使用独立实例(非ZEO)进行测试。

是的,有一种方法,尽管我永远不会这么做