Plone 2.0 升級至 Plone 2.1測試


遠凡札記 Yuanfarn's Notes 

最後更新日期:Nov. 12, 2005.

由 Plone 2.0 升級到 Plone 2.1 是一個變化非常大的過程,所以在 Plone 2.1 正式發佈以前,我也下載了 alpha 版、beta 版回來測試,更數次從 svn 中下載不同版本回來測試,目的是想瞭解在升級過程中可能遇到什麼樣的問題。

以下是測試過程的一些記錄:

  1. Archetypes 由 1.2.5-rc5 升級為 1.3 版後,請參考 plone.org 網站內的說明,在 ZMI 中由 archtypes_tool 的 Migration Tab. 執行升級的動作。

    Song 前輩提醒說,利用 Archetypes 開發的 Products ,對於 Archetypes 的版本非常依賴,所以在升級 Archetypes 前必須充份經過測試。

  2. 關於 Plone 2.0.5 仍然採用 Archetypes 1.2.5-rc5 而非 Archetypes 1.3,在 Plone 2.0.5 的 Release notes 提到:

    We still ship Archetypes 1.2.5-rc5 because updating AT in a minor release is not appropriate. You may want to be extra careful when upgrading not to overwrite newer versions of AT. We recommend to download latest 1.3 release of Archetypes if you do product development.

    根據 2005 年 3 月 12 日釋出的 Plone 2.1-alpha1 的 HISTORY 記錄,Plone 2.1 將採用 Archetypes 1.3。同時加入了 ATContentTypes、SecureMailHost 兩個 Product,並移除了與 Formulator 這個 Product 的相依性。

    - Removed the dependency on Formulator as well as FormTool and NavigationTool. [stefan]

    - Merged Plone 2.1-atct branch. Plone now uses and requires Archetypes 1.3 and ATContentTypes. [stefan]

    - Plone now uses SecureMailHost instead of plain old MailHost. [tiran]

  3. Plone 2.1 加入了許多新的特性,在 plone.org 網站上的 Roadmap for Plone 有詳細的內容。這裡只摘錄其中幾項:

    • #28: AT Content Types as default types (Christian Heimes)

      在 #28 的頁面中提到,由於 CMF types 老舊,且 Document 不支援 reST 及 pdf/doc 上傳等性質,所以 Plone 2.1 改用基於 Archetypes (>1.2.5) 開發 ATContentTypes (ATCT)。

    • #73: Auto-generate short names from title (Alexander Limi, Alec Mitchell)

      在 Plone 2.0 及之前的版本中,新增 Document、File、Folder、Image 等時,必須由使用指定 short name (ID),否則預設會以像 document.2005-05-27.7222369690 這類的名稱為 short name (ID),自 Plone 2.1-alpha2 起則會在第一次存檔時依據 title 來自動產生 short name (ID)。

    • #74: Add cut/copy/paste/delete and batch links to the content menu bar (Alexander Limi, David Convent)

      自 Plone 2.1-alpha2 起在 content menu bar 也加上了 cut/copy/paste/delete 等功能的快速連結。(在依據 Andy McKay 的《The Definitive Guide to Plone》撰寫的 new Plone Book 中,將 “Content menu bar” 稱為 “Content drop-down lists”。)

    • #82: Require (and ship with) PIL (Christian Heimes, Alexander Limi)

      由於 ATContentTypes 需要 PIL,因此自 Plone 2.1 起,PIL 成了必須安裝的項目。在 Plone 2.1-alpha2 的 CMFPlone/INSTALL.txt 中提到需要 PIL 1.1.5 或更高的版本,同時編譯 PIL 時必須將 jpeg 及 png 支援加入。

  4. 安裝 Plone 2.0.5 並升級 Archetypes 為 1.3.x 版後,建立 Plone site 時可以選擇 Archetypes Site,這個選項相當於利用 /portal/portal_quickinstaller 安裝 MimetypesRegistry、PortalTransforms 及 Archetypes。已建立的 Plone site 也可以透過 /portal/archetype_tool 來安裝或移除 Archetypes 的物件。

    Plone 2.1-alpha1 更新增 ATContentTypes Site 這個選項。但是在嘗試建立 ATContentTypes Site 時會出現類似以下的錯誤訊息:

    The id "ATFolder" is invalid - it is already in use.
    (Also, an error occurred while attempting to render the standard error message.)

    Plone 2.1-alpha2 則又移除了 Archetypes Site 及 ATContentTypes Site 的選項,因為已經預設採用 ATCT types 了。(參閱“#28: AT Content Types as default types (Christian Heimes)”的內容。)

  5. 在 Plone 2.0.5 升級為 Plone 2.1-alpha1 時,先利用 /portal/portal_quickinstaller 在 Plone 2.0.5 site 中安裝 Archetypes 及 ATContentTypes,接著由 /portal/portal_migration 升級 Plone site。測試後確實可以直接由 /portal/portal_migration 升級該 Plone site。

    然而升級時可能會出現這樣的錯誤訊息:

    ValueError: Unknown mime type application/x-zip-compressed

    在 /portal/mimetypes_registry 中可以找到 application/zip 這個 MIME type:

    Name : ZIP archive
    Icon path : zip.png
    binary : yes
    content types : application/zip
    extensions : *.zip, zip

    如果將這個 MIME type 的 content types 改為 application/x-zip-compressed,又會出現以下的錯誤訊息:

    ValueError: Unknown mime type application/zip

    所以我新增一個 application/x-zip-compressed 這個 MIME type 就可以了:

    Name : normal ZIP archive
    Icon path : zip.png
    binary : yes
    content types : application/x-zip-compressed
    extensions : *.zip, zip

    另外,我發現若不願修改 /portal/mimetypes_registry 的情況下,將該 zip 檔案重新上傳一次也可以解決這個問題。

  6. Plone 2.0.5 site 升級至 Plone 2.1-alpha1 時也可能出現這個錯誤訊息:

    IOError: cannot read interlaced PNG files

    這似乎是 PIL 不支援 interlaced PNG 的問題,只要使用 Gimp 將這些圖檔另存為 non-interlaced PNG 就可以了。(按:說的比較簡單,如果 interlaced PNG 太多個,處理起來可得花上不少時間呢!)

    所謂 interlaced (交錯式) PNG 和 interlaced GIF 有著同樣的性質,由瀏覽器開啟圖片時,會由模糊到清晰逐漸地顯示,直到整個圖檔開啟(下載)完畢。更詳細的說明可以參考下列網站的說明:

    以下取自 http://www.webcolors.freeserve.co.uk/png/ 的說明:

    Interlaced GIF images display their data in 4 passes, each one filling in more detail from top to bottom. The first pass begins after 1/8 of the image has downloaded. PNG uses a more sophisticated scheme which begins rendering the image after only 1/64 of the data has arrived. PNG's 7 pass scheme, devised by Adam Costello, fills in increasing amounts of detail both horizontally and vertically. Interlacing increases the file size. You may find that with PNG's better compression fewer images will need interlacing. For exceptionally large image files thumbnail preview images are another option.

  7. Plone 2.0.5 site 升級至 Plone 2.1-alpha1 時得有些耐心,以我自己的 Plone site 為例,一個匯出後約 250MB、內含 5900+ 個物件的 Plone site,升級過程大約產生 1.5GB 的暫存檔,且大約需要五個小時左右的時間。

    更新過程中,最奇怪的就是這個訊息:

    IOError: image file is truncated (14 bytes not processed)

    然而我可以確定這個圖檔在放入 plone site 時是正確的,沒想到經過幾次升級 Plone 後竟然壞掉了 14bytes。

  8. 將 Plone 升級為 2.1-alpha2 後,必須執行以下三個動作:

    • 由 /portal/portal_quickinstaller 安裝 ATReferenceBrowserWidget。

    • 由 /portal/portal_quickinstaller 重新安裝(reinstall) ATContentTypes,或由 /portal/portal_atct 升級 ATContentTypes。

    • 由 /portal/archetype_tool 執行 migratioin 將 Archetypes 升級。注意一點,Archetypes 無法由 /portal/portal_quickstaller reinstall 的安裝升級。

    其中若未安裝 ATReferenceBrowserWidget,當編輯存在的 Document、Folder 或 Image 等時會出現以下的錯誤訊息:

    Error Type
    AttributeError
    Error Message
    Macro referencebrowser does not exist for Request made at
    2005/05/28 18:24:34.484 GMT+8

    感謝 Hanno Schlichting <schlichting@bakb.net> 與 Alec Mitchell <apm13@columbia.edu> 在 Plone Developers list 回信指導。

  9. 由於 Plone 2.0.5 是 CMF types based,可以先將 Archetypes 升級為 1.3.3-final,並安裝 ATContentTypes 0.2.0-final,然後執行以下動作將 Plone 2.0.5 site 變更為 ATCT based:

    • 由 /portal/portal_quickinstaller 安裝 Archetypes 1.3.3-final、ATContentTypes 0.2.0-final、MimetypesRegistry 1.3.3-final05 及 PortalTransforms 1.3.4-final。

    • 執行 /portal/migrateFromCMFtoATCT 將存在的物件(Document、Image 等)由 CMF types 變更為 ATContentTypes types。注:按下 /portal/migrateFromCMFtoATCT 的 Test Tab. 即可執行 /portal/migrateFromCMFtoATCT。

    • 執行 /portal/switchCMF2ATCT 將 /portal 改為 ATCT based。

    這麼一來,便可以直接由 Plone 2.0.5 site (ATCT based) 升級為 Plone 2.1-alpha2 或 Plone 2.1-beta1 (SVN/UNREALEASED) 了。

    注意:將 Plone 2.0.5 site 變更為 ATCT based 時不能使用 ATContentTypes 1.0.0-devel 版,在 ATContentTypes 1.0.0-devel (snapshot-20050525) 的 INSTALL.txt 中寫道:

    ATContentTypes 1.0 is designed for the upcoming version 2.1 of Plone. Most parts of ATContentTypes would work with Plone 2.0.5 but there are at least 4 known bugs and several missing features like IBrowserDefault and ITranslateable in Plone 2.0.5. Read ERRATA.txt for more informations. Maybe the plone community will release Plone 2.0.6 which will contain some bug fixes and backports from 2.1.

    經過測試後,會得到以下的錯誤訊息:

    2005-06-12T03:18:45 ERROR(200) Zope Could not import Products.ATContentTypes
    Traceback (most recent call last):
    (部分省略…)
    from Products.CMFPlone.interfaces.BrowserDefault \
    ImportError: No module named BrowserDefault
    Traceback (most recent call last):
    (部分省略…)
    from Products.CMFPlone.interfaces.BrowserDefault \
    ImportError: No module named BrowserDefault

    另外,若忽略了 /portal/switchCMF2ATCT 這個動作,在升級到 Plone 2.1-beta1 (SVN/UNREALEAD) 後,瀏覽原來存在的物件會得到以下的錯誤訊息:

    Error Type
    AttributeError
    Error Value
    'NoneType' object has no attribute 'getId'
    Request made at
    2005/06/12 05:03:43.332 GMT+8
  10. 自 Plone 2.1-alpha2 起採用 ATContentTypes 1.0.0-devel,在其 INSTALL.txt 中也提到幾點事項,首先是關於 Zope 的設定:

    You need to reconfigure Zope to make it play nice with Plone and AT Content Types.

    At first you need to set reST header level to 2.

    For Zope 2.7 you also must set the rest-input-encoding and rest-out-encoding to the same encoding you are using as site-encoding for Plone. I suggest using utf-8 everywhere.

    根據 INSTALL.txt 的內容,Zope 2.7 的使用者必須修改 etc/zope.conf:

    <environment>
    STX_DEFAULT_LEVEL 2
    </environment>

    此外則是提到關於 CMF types 的升級:

    Migration may fail and it could destroy your data. So please backup your ZODB before migrating to AT Content Types.

    Go to the external method 'migrateFromCMFtoATCT' in the ZMI of your portal root. Run it using the 'test' tab.

    及 CMF Plone Types 的升級:

    Migration from CMF Plone Types is no longer supported. There are some outdated migration scripts available in SVN.

  11. 在上述的測試中,先將 CMF types based 的 Plone 2.0.5 site 變更為 ATCT types based 的 Plone 2.0.5 site,然後再升級到 Plone 2.1-alpha2 或 2.1-beta1 (SVN/UNREALEAD),幾乎都能順利完成升級程序。

    若先將升級為 Plone 2.1-alpha1 後,再升級為 Plone 2.1-alpha2 或 Plone 2.1-beta1 (SVN/UNREALEAD) 均可以順利完成升級的程序。

    但是,若直接由 Plone 2.0.5 升級到 Plone 2.1-alpha2,則會得到 IOError: cannot identify image file 的錯誤,且似乎對 .gif、.png 及 .jpg 等的圖檔都會出現同樣的錯誤。由 Plone-developers mailing list 中“Plone migration from 2.0.5 to 2.1-alpha2 failing”這個主題的討論中得知,應該與整合 ATContentTypes 及 PIL 有關。

    然而 2005 年 6 月 16 日由 svn 下載 2.1-beta1 (SVN/UNREALEAD),在 CMFPlone/HISTORY.txt 中提到:

    - Fixed migrations of older instances caused by the ResourceRegistries refactoring. If you updated and migrated while this was still broken, then you might have to force a migration from alpha2 or even alpha1. [fschulze]

    經測試後,由 Plone 2.0.5 (CMF types based)直接升級到於 2005 年 6 月 16 日由 svn 下載的 Plone 2.1-beta1 (SVN/UNREALEAD) 時,仍然得到這個錯誤訊息:

    IOError: cannot identify image file

    於 2005 年 6 月 25 日再次由 svn 下載 2.1-beta1 (SVN/UNREALEAD),經過測測後,已經可以順利將一個 Plone 2.0.5 site (CMF types based) 直接升級了。有興趣的網友可以利用 svn 下載試試,下載 Plone 2.1 的指令:

    svn co https://svn.plone.org/plone/bundles/anon-2.1
  12. 2005 年 6 月 25 日利用 svn 下載了使用 CMF 1.5 的 Plone 2.1-beta1 (SVN/UNREALEAD),

    svn co https://svn.plone.org/svn/plone/bundles/2.1-CMF1.5/

    經過測試後,可以順利將 ATCT based 的 Plone 2.0.5 site (ATCT based) 及 Plone 2.1-alpha1 site 升級。但是升級 CMF types based 的 Plone 2.0.5 site (CMF types based) 時,出現的錯誤為:

    AttributeError: 'OOBTreeItems' object has no attribute 'index'
  13. Stefan H. Holek <stefan@epy.co.at> 於 2005 年 7 月 1 日在 plone-developers mailing list 張貼了一封標題為“Heads up: CMF 1.5 integration merged into 2.1 branch”的文章,提到 CMF 1.5 已經整合進 Plone 2.1 main line 了,所以

    Plone 2.1 now officially requires CMF 1.5.x.

    欲使用 svn 下載 Plone 2.1 的使用者請執行:

    svn co https://svn.plone.org/svn/plone/bundles/2.1

    以下是 Stefan H. Holek 張貼的文章全文:

    All,

    The CMF 1.5 integration branches have been merged into the main line.
    Plone 2.1 now officially requires CMF 1.5.x.

    Bundles:

    https://svn.plone.org/svn/plone/bundles/2.1 contains the new
    dependencies. It is probably easiest to throw away existing instances
    of bundle checkouts and start anew. If you absolutely need to upgrade
    an existing instance, remove the CMF 1.4 products and run getCMF.sh
    (in addition to "svn up", of course).

    If you had anon-2.1 or 2.1-anonAT bundles, then, these do no longer
    exist. They have been obsolete for a while and I took the chance to
    get rid of them entirely. You may be able to use "svn switch --
    relocate" to switch your sandbox to the 2.1 bundle. I haven't tried.
    Also see http://svn.plone.org/ and the online subversion book.

    http://plone.org/development/info/participation has been updated to
    reflect reality.

    Because I have been asked this numerous times: Plone 2.1 will of
    course still work with Zope 2.7! It will *also* work with Zope 2.8,
    but 2.8 is *not* required. CMF 1.4 is dead however.

    I will take the weekend off and hope to be able to roll a beta
    release on Monday. It is absolutely necessary that I have tarballs of
    all core products by then. Please don't forget to do yours. I'd
    appreciate emails with download URLs, so I don't have to hunt for the
    stuff all over the internets.

    Rock on, rockers!

    Stefan


    --
    Software Engineering is Programming when you can't. --E. W. Dijkstra

  14. SourceForge.netPlone project 下載了 7 月 7 日釋出的 Plone 2.1 Core (Plone-2.1-beta1.tar.gz),Plone 2.1-bata1 已整合了 CMF 1.5.x (CMF 1.5.2beta1),同時移掉 Epoz,而改用 Kupu 1.3 (SVN/unreleased) 這個 WYSIWYG 編輯器。

    嘗試將 Plone 2.0.5 site (CMF types based) 升級為 Plone 2.1-beta1 時出現這個錯誤訊息:

    AttributeError: 'OOBTreeItems' object has no attribute 'index'
  15. 2005 年 7 月 8 日由 svn 下載了整合 CMF 1.5.x 的 Plone 2.1-beta2 (svn/unreleased),升級 Plone 2.0.5 site (CMF types based) 時出現的錯誤訊息為:

    AttributeError: 'str' object has no attribute 'content_type'

    2005 年 7 月 10 日再次下載 Plone 2.1-beta2 (svn/unreleased),並順利將 Plone 2.0.5 site (CMF types based) 升級為 Plone 2.1-beta2 (svn/unreleased)。接著,7 月 12 日也順利將 Plone 2.0.5 site (CMF types based) 升級為 Plone 2.1-beta2 (svn/unreleased)。