このサイトについて

Zope 2.8への移行メモ

Zope 2.8への移行メモ

スケジュール通りであれば,現地時間の明日(6月11日),Zope 2.8がリリースされます。

Zope 2.8は,有識者の間でも「これまでで最も大きなマイルストーンとなるリリース」と言われるほど種々の重要な変更が含まれています。Five(http://codespeak.net/z3/five/)を同梱し,Zope 2系とZope 3系との「融合」を強く意識した最初のリリースとなります。Zope2,Zope3融合のロードマップは,Webcoreでも参加したPyCon 2005でも発表されました(http://coreblog.org/ats/608)。

Zope 2.8におけるその他の重要な変更点として,Zope上のオブジェクトを格納している「ZODB(Zope Object Database)」のバージョンアップが挙げられるでしょう。Zope 2.7に搭載されていたZODB 3.2と比べると,小数点以下でのバージョンが0.2も上がっています。主な変更点をまとめると

  • ZODB 3.3
    • Python 2.2から導入されたNew Style Classへの対応
    • MVCC(multi-version concurrency control)を搭載
  • ZODB 3.4
    • ストレージの強化 - RDBバックエンドのストレージなどを実装しやすいように

などが挙げられます。特にインパクトが強いのは,3.3で導入された「New Style Classへの対応」と「MVCCの搭載」です。

Zope 2.7からZope 2.8への移行

ZODBに大幅な変更が加わった影響で,ZopeのデータファイルであるData.fsの互換性が崩れています。Zope 2.7で何もしていない状態のData.fsであればZope 2.8に「そのまま」移行できるようですが,サードパーティーのプロダクトなどがインストールされている場合は,Data.fsをそのままコピーし移行することができないようです。

このため,Zope 2.7で構築されたサイトをZope 2.8に移行する際は,現実的にこれまでのように「Data.fsをコピーする」という方法が利用できません。多くの場合,代わりに,Zope上のオブジェクトを「エクスポート」して移行する必要があります。

エクスポートを利用した移行を行う際の注意点

Zope上にある(ほぼ)全てのオブジェクトはエクスポート可能です。エクスポート -> インポートの手間を考えると,ルートにあるオブジェクトを,一端フォルダにコピーしてまとめるなどしてエクスポートし,新規に立てたZope 2.8インスタンスにインポートするのがよいでしょう。ただしこの際,コピーできないオブジェクト(DAやVersionなど)やtemp_folderはコピーしないようにし,2.8上で新規作成するなどして対処します。

「ルートにあるもの」については少々注意が必要です。ルートに設定された「プロパティ」はエクスポートできませんので,management_page_charsetなどは手動で設定する必要があります。

また,ルートにあるacl_usersも事実上移行不可能です。コピー,エクスポートまではできるのですが,削除ができず,IDが固定なためサブフォルダにインポートしたものをルートに設置できないのです。ルートのacl_users上にある設定は,移行方法を別途検討する必要があるでしょう。

ZEOへの影響

ZEOクライアントは3.2と3.3/3.4間で限定的な互換性(書き込みが出来ない)のみ提供されています。このため,ZEO環境のZopeを2.8に移行する際には,ZEOクライアントもZODB 3.3,あるいは3.4ベースに移行する必要があるでしょう。

COREBlogへの影響

COREBlog 1.2はZope 2.8上で問題なく稼働します。より前のバージョンも問題なく稼働するでしょう。RefererPluginなど周辺のProductの稼働も問題ないようです。なお,coreblog.orgは本日昼ごろから完全にZope 2.8b2ベースに移行し,問題なく稼働しています。

Ploneへの影響

Plone最新の安定版である2.0.5はZope 2.8上では稼働しないようです。

http://coreblog.org/camp/2005/ はPloneベースですので,別のZopeインスタンス上に移植し,Apacheのmod_rewriteを使って透過的に見せています。

Zope日本語版(ZMILocalizer)への影響

私が開発し,Zope Japanが配布しているパッケージ(pr3)に同梱されているZMILocalizerは,Zope 2.8で利用すると管理画面がエラーで表示されないという致命的な不具合を抱えていますので,利用しないようにしてください。リリース当時もPloneとの相性が悪いという問題があり,その後メンテナンスもされないようです。Zope Japanの配布しているパッケージについては信用しない方が身のためでしょう。仮にも「Zope Japan」と名乗っている企業なのですから,もっとしっかりして欲しいものです。

後継プロジェクト(http://sourceforge.jp/projects/zope-j10n/)で配布しているパッケージは,Zope 2.8でも致命的なエラーが出ないように修正してあります(タブの部分とメッセージが英語のままになる)。出来る限りこちらのパッケージをご利用ください。Zope 2.8への完全対応については,現在方法を検討中です。方法が決まり次第,実装してCVSにコミットする予定です。

Zope 2.8移行の勘所

ZODB 3.3からMVCCが搭載されたことなどがあり,Zope 2.8の応答性能は2.7などに比べかなり向上しています。高可用性を求められるZopeサーバであれば,ぜひZope 2.8に移行したいところです。

とはいえ,Zope 2.8で稼働しないプロダクトが多くある現状では,リスクが伴うことも事実です。可用性向上のメリットと,非互換製というリスクを「てんびん」にかけた上で,バージョンアップするかしないかを決定すればよいでしょう。

2.8に移行すべきサイトの条件(例)
  • ZODBへの書き込み/更新が頻繁なサイト
  • ZopeからRDBMSへの閲覧/更新が多く,フロントエンドがボトルネックになって性能が低くなっているサイト
  • COREBlogのように安定して信頼性のあるプロダクトのみで構成されているサイト
2.8に移行すべきでないサイトの条件(例)
  • Ploneサイト
  • 十分なパフォーマンスで稼働しているサイト,あるいはアクセスが頻繁でないサイト
2010-08-27 04:35