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

を使用して、下位互換性のためのエイリアスを作成できますsys.modules。あなたのパッケージでこれをしてください__init__.py

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

このようにして、永続化機構はクラスをまだ見つけることができます。

ArchetypesインスタンスがZODBに永続化されると、永続化機構はクラスのモジュールパス(などの点線のPythonパスmy.packages.types.foobar.FooBar)を保存されたデータに保存します。ZODBからオブジェクトを復元する場合、同じパスを使用してインスタンスを再作成します。パッケージの名前を変更すると、これらの参照はすべて壊れます。

上記のトリックで、オブジェクトが変更され、トランザクションでZODBに再度書き込まれた場合、新しいモジュールパスが保存されるのは良いことです。したがって、このパッケージからすべてのArchetypesインスタンスに書き込みを行って移行を永続的にし、上記の回避策を再度削除できるようにすることが考えられます。

于 2012-03-07T16:21:20.690 に答える