my.packages是src目录中的自定义archetypes包.Plone实例中的数千个项目都添加了其类型.我想将包重命名为my.package.通过简单的卸载my.packages和安装my.package,我找到的http://本地主机:8080/mysite的/ MyFolder中/我的项目展示<persistent broken my.packages.content.mytype.MyType instance '\x00\x00\x00\x00\x00Un^'>.我应该做迁移吗?或者有一种简单的方法可以解决这个问题吗?
您可以通过fudzing为后向兼容性创建别名sys.modules.在您的包中执行此操作__init__.py:
import sys
sys.modules['my.packages'] = sys.modules[__name__]
Run Code Online (Sandbox Code Playgroud)
这样,持久性机制仍然可以找到你的类.
会发生的情况是,当您的Archetypes实例持久存储在ZODB中时,持久性机制会my.packages.types.foobar.FooBar在存储的数据中存储类的模块路径(如点的python路径).从ZODB恢复对象时,将使用相同的路径重新创建实例.重命名包时,所有这些引用都会被破坏.
通过上述技巧,好处是如果您的对象在事务中被更改并再次写入ZODB,则将存储新的模块路径.因此,您可以设想从此程序包中写入所有Archetypes实例以使迁移成为永久迁移,以便您可以再次删除上述解决方法.
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |