gpt4 book ai didi

plone - 将 my.packages 重命名为 my.package

转载 作者:行者123 更新时间:2023-12-04 19:15:51 27 4
gpt4 key购买 nike

my.packages 是 src 目录中的自定义原型(prototype)包。 Plone 实例中的数千个项目与其类型一起添加。我想将包重命名为 my.package。通过简单地卸载 my.packages 并安装 my.package,我发现 http://localhost:8080/mysite/myfolder/my-item显示 <persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'> .我应该进行迁移吗?或者有没有简单的方法来解决这个问题?

最佳答案

您可以通过与 sys.modules 混淆来创建一个向后兼容的别名。 .在您的包裹中执行此操作__init__.py :

 import sys
sys.modules['my.packages'] = sys.modules[__name__]

这样,持久性机器仍然可以找到您的类。

发生的情况是,当您的 Archetypes 实例被持久保存在 ZODB 中时,持久性机制会在存储的数据中存储该类的模块路径(带点的 python 路径,例如 my.packages.types.foobar.FooBar )。从 ZODB 恢复对象时,然后使用相同的路径重新创建您的实例。当你重命名你的包时,所有这些引用都被破坏了。

使用上述技巧,好处是如果您的对象在事务中被更改并再次写入 ZODB,新的模块路径将被存储。因此,您可以想象从此包中写入所有 Archetypes 实例以使迁移永久化,以便您可以再次删除上述解决方法。

关于plone - 将 my.packages 重命名为 my.package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com