首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在plone中按需更新单个原型对象的模式?

如何在plone中按需更新单个原型对象的模式?
EN

Stack Overflow用户
提问于 2009-07-23 00:26:39
回答 2查看 636关注 0票数 5

我有数十万个基于plone原型(plone 2.5.X)的对象,它们需要将原型模式更新到最新版本。原型模式迁移工具对于数量较少/中等数量的对象非常有用,但它会让我的服务器在尝试迁移所有对象时陷入瘫痪,以至于我总是会终止脚本。我希望能够一次更新一个对象的模式,可能是检索到的对象--这可能吗?如果没有,有没有其他方法来更新大型plone站点中的原型模式?

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2009-08-05 19:51:46

在深入研究了2.5版的目录代码之后,我终于找到了懒惰模式更新的答案:

代码语言:javascript
复制
if not self._isSchemaCurrent():
    logging.debug("updating schema for %s"%self.absolute_url())
        try:
            import transaction
            transaction.begin()
            self._updateSchema()
            transaction.commit()
        except Exception, e:
            logging.error('Error updating schema at %s: %s'%(self.absolute_url(), e))
            return False
else:
    logging.debug("schema for %s is up to date"%self.absolute_url())
    return True

请注意,这是Plone 2.5.3,从我挖掘的plone 3看起来略有不同。对于一些我已经定制了processForm的对象,我在那里执行升级,这样表单就可以显示新的字段并进行处理。对于其他人来说,只是在at_post_edit_script钩子中,因为这些人通常不会进行大规模的重要模式升级。此外,表单处理是站点中最慢的部分,所以用户体验不会受到太大影响。

它很粗糙,但它不会导致I/O浪费,而且它可以与所有版本的对象一起工作。这个我要了!

票数 5
EN

Stack Overflow用户

发布于 2009-07-28 05:05:40

虽然你没有解释“让它的膝盖”是什么意思,但我会猜你的内存已经用完了。如果是这样,这可能是脚本没有将更改提交到磁盘的问题。在循环中添加一个transaction.commit() (最好通过测试每隔100或1000次执行一次)应该可以解决这个问题。

编辑:所以我错了,这不是记忆问题。似乎原型更新器做了正确的事情。

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

https://stackoverflow.com/questions/1168977

复制
相关文章

相似问题

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