5

my.packages 是 src 目录中的自定义原型包。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^'>. 我应该进行迁移吗?或者有没有简单的方法来解决这个问题?

4

1 回答 1

5

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

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

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

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

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

于 2012-03-07T16:21:20.690 回答