2012/04/11

Plone Package Renaming

假設有個名稱是 my.packages 的模組,用了一陣子,產生許多 MyType 的內容項目,想要把它改名為 my.package,下列是處理經驗記錄。

第一次的嘗試,是在 src 目錄裡把 my.packages 複製並修改成 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^'> 訊息。當然,使用 migration 程式碼是個方法,但實在是殺雞用牛刀。

有個輕量級的方案,是先在模組的 __init__.py 裡用 sys.modules 來建立相容資訊:

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

不過,我的模組還額外有用到 content type based portlet,它同樣把舊的模組名稱記到 instance 裡,在 https://dev.plone.org/ticket/7375 有提到處理方法,試了沒成功,有成功的方式是到 @@types-controlpanel 先取消 portlet 的設定值,再啟用 my.package 模組。這時候出現一些警告訊息,但是系統看起來運作正常,應該是提供相容資訊後的暫時訊息:

INFO Archetypes
ArchetypesTool: Trying to register "my.package.MyType" which has already been registered.  The new type my.packages.content.mytype.MyType is going to override my.package.content.mytype.MyType

再到 ZMI 裡 archetype_tool,執行 Update Schema 後,希望這樣就算是把 instance 更新了。

No comments: