Plone 2.0 サイトの Plone 2.1 への移行
Plone 2.0 から Plone 2.1 への以降
takanori
この文書について
この文書は
Migrating a Plone 2.0 site to Plone 2.1
という plone 2.0 から plone 2.1 に移行するためのさまざまな情報を含んだ文書を、鈴木たかのりが翻訳したものです。
翻訳レベルが低いので、読みづらい部分や実は間違っている部分とかもあるかもしれませんので、そのあたりご了承ください。
「ここがおかしいよ」みたいな指摘があれば、コメントとして書き込んでいただければと思います。
Plone 2.0 から Plone 2.1 への以降
移行を行う前にこの文書を読んで、Plone サイトを移行することによる影響を理解する必要があります。
特に「一般的な問題点と課題」の箇所は全て読んでください。
私たちは以下の標準的な手順を提案します:
- 移行の開始前にあなたが使用しているプロダクトと
Data.fs ファイルを
バックアップしてください。
(Data.fs をコピーする前に Zope をシャットダウンするか、Zope を起動したままバックアップしたい場合は repozo.py スクリプトを使用してください。)
- 最初に試験用のインスタンス(実際のインスタンスのクローン)を使用して移行を行ってください。
― 移行後にきちんと動作していることを確認するまで、実際のサイトを移行しないでください。
- 管理 ユーザとなって移行を行います。
(一般的には
admin ユーザを使用します。もしくは他の Manager 権限を持ったユーザで行います。)
Emergency User で移行しようとしている人がいました。
― それは非常に誤った考えです。 :)
移行とバージョン番号についてのメモ
plone は 2.0 から 2.1 へのバージョンアップで、かなり基盤の部分を変更しました。
plone 2.1 は18ヶ月間の活発な開発と改善により、よりスケーラブルで協力なプラットフォームとなっています。
一部の人々は低いバージョン番号の増加に混乱し、それがマイナーなアップグレードであると誤解しています。
実際にはそうではなく、かなり大幅なアップグレードになっています。
plone 2.1 までは(標準的なフレームワークのポリシーの変更のような)メジャーなリリースでは、バージョン番号を 0.1 させるという方針でした。
しかしこれは混乱を招くと考え、方針を変更しました。
plone チームは6ヵ月ごとに新しいバージョンをリリースする予定なので、重要なリリースごとにバージョン番号 0.5 増加するように方針を変更しました。
私たちはそれぞれのリリースに含まれる膨大な作業量を反映し、また、このリリースでなにが行われるかを理解してもらいやすくするためにこのようにしました。
ここでのポイントは、たとえ 2.0 から 2.1 へのアップグレードがマイナーなものに感じられたとしても、実際にはそうではないということです。
コンテントタイプの基盤は書き直され、全てのコンテンツは新しいタイプに変換する必要があります。
その作業の上で若干の痛みを伴う可能性があります。
― サードパーティのプロダクトやテンプレートの再カスタマイズ、もしくは移行ツールのバグによるものかも知れません。
(バグの大部分は 2.1 と 2.1.1 のリリースで解決されました。)
移行(migration)について
私たちはあなたがどのように移行対象のシステムに手を加えたのかわからないため、移行ツールがどれだけ動作するかを予測することが難しいという点に注意してください。
plone は非常に柔軟なシステムです。
しかし、システムにどのような変更を加えたかによって、移行の結果に大きな影響を与えます。
- 標準的な plone サイトに単純なカスタマイズしか行っていない場合は、おそらく簡単に移行が行えます。
- たくさんの Plone チームではない開発者によるサードパーティ製のプロダクトに依存している場合は、なにかを言うのは難しいです。
- それらのプロダクトが plone 2.1.x での動作が保障されていることを確認してください。
SpeedPack についての特別なメモ:
このプロダクトによって提供される多くの部分が最新の plone に取り込まれています、このプロダクトは不要になったためアンインストールしてください。
(そして zope 2.8 では動作しません)
- plone による大規模なサイトを運用していて 2.1 への移行による痛みをともないたくないならば、きちんとした移行を行える会社を雇うことをおすすめします。
Plone Developer メーリングリスト
にメールを送ってください。必要ならばあなたの地域で活動している会社を推薦することがきます。
移行ツールは大部分のケースを処理することができます。
しかし、あなたのところでは違うかもしれません。
かなりカスタマイズされたサイトでは、移行に際し考慮に入れるべき点があります。
将来 plone 2.5(次のリリース)のために、移行を簡単に行うために構造に大幅な改善を行います。
そのため、コンテンツと設定をエクスポートしてインポートするためのよりよいツールを提供します。
plone 2.1.2 移行のリリースでは人々からのフィードバックを元に、移行ツールに重要な改善が含まれています。
そのため plone 2.1 や 2.1.1 のリリース時に移行に失敗した場合でも、新しいバージョンで再度移行を試みてください。
移行の実施
移行を実際に始める前に、あなたはどちらの方法で移行作業を行うかを決めなければなりません。
移行の手順として2つの一般的な方法があります。:
- あなたのサイトのコンテンツ、プロダクトとカスタマイズをその場所(in-place)で行う。
- コンテンツをエクスポートして、新しく作成した plone 2.1 サイトにインポートする。
in-place 移行手順はより包括的な手順のため、あなたが無作法なサードパーティ製のプロダクトを使用していたり、とても古い plone のインスタンスを使用している場合にはエラーを起こしやすいです。
もしコンテンツがもっとも重要ならば、全てのコンテンツをフォルダごとにエクスポートして、きれいなインスタンスにインポートして、設定と簡単なカスタマイズを再度行うほうがよいかも知れません。
この手順は
importing Plone 2.0 content into 2.1 FAQ
に記述されています。
問題が発生している場合に最後の手段としてのみ、この手順を行うということに注意してください。
(もしくはクリーンなサイトから初めてコンテンツだけを移行したい場合に)
― 大部分の人にとっては in-place 手順が移行に適した方法です。
in-place 手順は plone を移行するための標準的な手法です。
手順の概要を示します。:
- あなたがこの移行作業で zope 2.7 から zope 2.8 にアップグレードしたい場合は、
plone の移行を完了させるまでは zope 2.7 のままで作業を行い、
それから zope 2.8 にアップグレードしてください。
zope 2.8 は大きな変更と改善点を含んでいます。
そのため、zope と plone のアップグレードを一度に行うことはおすすめできません。
zope 2.7 と zope 2.8 は共に plone 2.1.x をサポートしています。
経験則として、アップグレードは上位層からはじめて、それがうまく動いてからその下の層をアップグレードしてください。
― 最初にプロダクト、次に plone、次に zope、そして python をアップグレードしてください。
- 使用しているサードパーティ製のプロダクトが plone 2.1 で動作することを確認してください。
あなたが使用しているプロダクトが plone 2.1 をサポートしていない場合、plone 2.1 に移行することはいろいろと問題が発生する可能性があります。
- なにもない場所に新しいバージョンの plone をインストールしてください。
その際、zope は同じメジャーバージョンのものを使用してください。
(例えば、zope 2.7.3 から zope 2.7.5 に変更するのは問題ありません。
しかし、2.7.x から 2.8.x に変更することは plone の移行が終了するまではおすすめできません。)
- 新しいインスタンスに、
Data.fs とすべてのプロダクト、External Methods をコピーします。
- 新しい zope と plone を立ち上げます。
- ZMI に
Manager ユーザでログインします。
-
portal_migration に移動します。
- migrate ボタンをクリックして移行プロセスが終了して画面になにか表示されるまで待ちます。
ここでは全てのコンテンツを新しいコンテンツ型で再作成し、検索用の再カタログ化も行われます。
そのため、あなたのサイトのコンテンツの数などによって、実行にかなりの時間がかかる場合があります。
一般的な問題点と課題
- いくつかの「新しい」タブはサイトの一番上に表示されます。
これは plone のナビゲーションのポリシーが変更したことによります。
plone 2.1 以上ではルート著かのフォルダは自動的にタブが作成されるので、
portal_actions ツールを使って手動でタブを作成する必要がありません。
タブを固定にするために、以下のいずれかの方法をとることもできます。:
- ルートフォルダのためだけに存在する portal_actions の中にあるエントリを削除します。
サイトの深いところをグローバルタブで表示していない場合は、おすすめの方法です。
- 'サイト設定' →
操作設定 にアクセスして「タブを自動生成する」の設定をオフにします。
これで plone 2.0 と同じ方法でタブを作成できます。
- 全てのコンテンツアイテムとフォルダは
view の権限があれば
ナビゲーションツリーに表示されます。
- もし plone 2.0 の古い形式(フォルダのみ表示)に戻したいなら
― そして公開されたアイテムのみとしたいなら
― 'サイト設定' →
操作設定
の中でナビゲーションに関する設定を制御できます。
- ルートに
events または news というショートネームのアイテムが存在する場合は、移行を開始する前に名前を変更する必要があります。
- 移行によって新しいスマートフォルダを作成するときに問題が発生する可能性があります。
AttributeError: referencebrowser_startupDirectory
と表示された場合は、WinZip で plone の tarball を解凍して長いファイル名がおかしくなるなどたくさんの問題が発生しています。
変わりに WinRAR のようなきちんと解凍できるツールを使用してください。
- 問題の一つとして、移行の実行時にサードパーティ製のプロダクトが、そのプロダクトのアイテムの移行の後片付けをしなかったり、プロダクトのアンインストール時に「死んだ」コンテンツを残したりすることがあります。
このようなことは移行の邪魔になります。
どのプロダクトとも関連づいていないアイテムの一覧で出力するシンプルなスクリプトがここにあります。
この一覧をもとに消滅したオブジェクトを削除することができます。
このスクリプトを使うには、ZMI から plone サイトのルート上で
Script (Python) を追加し、このファイルのコードを貼り付け、Save ボタンをクリックしてから Test タブをクリックしてスクリプトを実行します。
実行結果として動作していないオブジェクトの場所の一覧が表示されるので、必要であれば手動でそれらのオブジェクトを削除することができます。
- plone 2.1 と 2.1.1. でしばしば発生していたエラーとして、いくつかのオブジェクトが Archetypes ベースのものに変換されなかったということがありました。
移行後に "maximum recursion depth exceeded" と表示された場合は、そのフォルダやオブジェクトが CMF オブジェクトのままで Archetypes ベースのオブジェクトになっていません。
plone 2.1.2 にはこの問題の解決策が含まれています。
(この問題は plone 2.0 の RC に含まれていた問題のあるコードに原因があり、その後 2.0 の最終版のリリース前には問題は解決されました。
しかし、一部の人々はまた 2.0 RC のときに作成したコンテンツをそのまま使用しています。)
また、カスタマイズした 2.0 の
document_view テンプレートを plone 2.1 で使用する場合、このエラーメッセージが表示されることに注意してください。
- 全て(またはいくつか)の移行したコンテンツの所有者がもともとの所有者から移行を実行したユーザに変更されている場合は、移行の実行中に plone が所有者の情報を参照できなかったことを意味しています。
この場合はユーザの情報が LDAP に保存されていて、移行の前に LDAP との接続の準備が行われていなかったことが考えられます。
もう一つの可能性として、そのユーザが plone サイトの外で定義されているということが考えられます。
- 画像を表示したときやサマリの一覧でサムネイルを表示したときになにも表示されない場合:
plone 2.1 は PIL に依存しているため、PIL がインストールされていないと画像のスケーリングができません。
また、PIL をインストールする前に zlib(PNG サポート)と libjpeg をインストールされていることを確認してください。
詳細な情報は
Uploaded images aren't shown in view/ aren't resized
を参照してください。
- 全てのページでコンテンツが表示されなくなっている場合は、使用しているポートレットのうちどれか一つが壊れています。
いくつかのバージョンの plone (2.1.2 の RC を含む)では、ポートレットが壊れている場合にエラーを出力する代わりにコンテンツの表示を止めるべきところで、バグがありました。
- 一部の人々は 2.0 と 2.1 を比較してセキュリティの作用について混乱します。:
plone 2.0 ではあるアイテムの path に含まれるフォルダのどれかが「プライベート」状態の場合には、そのアイテムの状態がなんであれ参照できないというバグがありました。
plone のワークフローは異なった動作をし、フォルダが「プライベート」であってもその中にある「公開」状態のアイテムにはアクセスが可能となっています。
(しかし、フォルダにはアクセスできません。)
参照権限をフォルダの下位のアイテムに引き継ぎたい場合は、ワークフローに対していくつかの変更を行う必要があります。
詳細は
Making permissions cascade/inherit in a hierarchy
を参照してください。
plone 2.0 で正しく動作しているように見えていたのは「パンくず」のコードのバグによるものでした。
そして実際にはプロテクトはされておらず、誤って仕様が認識されました。
AttributeError: _length と表示されて場合は、zope 2.8
にアップグレードする必要があります。
また、ルートに存在するのも含む全てのカタログ(CMFCollector のカタログ等)で
manage_convertIndexes を呼び出す必要があります。
サードパーティのプロダクトでは時々カタログを内部に持っていて、そのことについてはそのプロダクトのメンテナに確認してください。
詳細は Zope-2.8.4-final/doc/FAQ.txt
の中にある
"Upgrading from Earlier Versions of Zope" セクションを読んでください。
- ライブ検索が動作しない、またはカタログからきちんと検索できていないなどの現象が発生した場合は
FAQ on disappearing catalogs
を参照してください。
- もしサードパーティ製のプロダクトで
AttributeError: toPortalTime
と表示された場合は、
toLocalizedTime を使用するように書き換えてください。
toPortalTime は plone 2.1 で削除されました。
- なんらかの理由によって plone のツールが壊れているか正しく機能しない場合は、新しく作られた plone サイトからツールをコピーすることができます。
例として移行後のサイトで
portal_form_controller ツールの機能が正しき提供されていない場合の対処方法を示します。
そのような場合には AttributeError: portal_form_controller というエラーメッセージが表示されます。
この例では {Zope} は zope のルート(例: localhost:8080)を
{Plone} は plone サイトをあらわします。
-
http://{Zope}/manage_main にアクセスして Manager ユーザでログインします。
- プルダウンメニューから Plone Site を追加します。
- これを
TempPlone と呼びます。
- plone サイトが作成されたので、 'http://{Zope}/TempPlone/manage_main
にアクセスします。
-
portal_form_controller のチェックボックスをチェックし、ページの一番下にある Cut ボタンをクリックします。
-
http://{Zope}/{Plone}/manage_main に移動します。
-
portal_form_controller が一覧に存在しないことを確認します。
もし存在する場合は、削除します。
- 画面の一番下にある
Paste ボタンをクリックします。
- これで、初期化された
portal_form_controller を使えるようになり、きちんと動作するようになります。
最後に TempPlone インスタンスを削除します。
付記
- もしまだ問題がある場合は、
issue tracker
で issue を作成してください。
- 作成するときは Upgrade / Migration トピックを使用してください。
また、issue を登録する前に同じ問題が登録されていないか検索することを忘れないでください。
あなたが問題のあった構成と設定についての情報を提供することによって、よりよい回答をすることができます。
ティップス: テンプレートを再カスタマイズする方法
もしあなたが plone 2.0 のテンプレートに対して重要な変更
(機能的に、CSS のクラスは 2.0 とほとんど同じです。)
を行っている場合、
2.1 のテンプレートに対しても同様のカスタマイズを適用しなければならないかもしれません。
そのためのもっとも最良の方法は:
- 元の plone 2.0 のテンプレートをひとつのディレクトリに入れます。
- カスタマイズしたテンプレートと plone 2.0 のオリジナルを比較します。
(diff ツールが役に立ちます
- Linux の Meld、
Mac OS X の (XCode に含まれている)FileMerge、
Windows の WinMerge がおすすめ)
- そこで行われた変更を 2.1 のテンプレートに適用します。
もちろん、カスタマイズに際してオリジナルの plone 2.1 のファイルに触れてはいけません。
カスタマイズしたテンプレートはファイルシステム上のプロダクトをい保存するか、
portal_skins の中の custom ディレクトリ内に作成します。
追伸
この資料は 2.0 から 2.1 への移行に関連する情報をまとめるために作成されました。
この資料を作成するにあたって、まず第一に移行のためのコードを作成した(退屈で複雑な作業です)
Plone チームの勤勉なメンバーと、
多くの人々の移行を成功させた
Plone Setup メーリングリストのメンバーの助けなしには不可能でした。
You all rock!