首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zope/Plone代码在生产部署后重新加载

Zope/Plone代码在生产部署后重新加载
EN

Stack Overflow用户
提问于 2018-04-04 15:28:22
回答 2查看 299关注 0票数 1

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

代码语言:javascript
运行
复制
[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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-04 19:28:36

如果您部署得如此频繁,您可以在低流量时间(即夜间)部署。

如果网站应该总是在运行,您可以有两组Plone实例:一组是活动的和服务请求的,另一组是不活动的。

当更新时,离线服务器被更新,当它们完成时,一个开关(例如HAProxy)被打开以替换活动服务器。

您甚至可以让所有服务器始终可用,但要进行更新,则在更新时将一些服务器脱机。

正如其他人以及您所指出的,我永远不会在生产中使用plone.reload或类似的开发工具。

票数 4
EN

Stack Overflow用户

发布于 2018-04-04 16:48:49

是的,有一种方法,尽管我不会在生产中这样做,但是在开发过程中,在浏览器视图中重新加载是一个很好的节省时间的方法:

代码语言:javascript
运行
复制
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)进行测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49654943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档