OpenPNE 2.12.x を OpenPNE 3.3.0 にアップグレードする手順を紹介します
12 / 13 日曜日 2009
※本エントリは OpenPNE 3.3.0 リリース直後のアップグレード手順を示したものです。現在のバージョンからの移行手順は、同梱の OpenPNE 2 からのアップグレード手順 をご覧ください。
OpenPNE 開発チームの海老原です。
OpenPNE 2.12.x を先ほどリリースした開発版 OpenPNE 3.3.0 にアップグレードするための手順について紹介しようと思います。(OpenPNE 2.14.x でも試した限りではとりあえず動きそうですが、ちゃんとした対応は 12/16 までお待ちください m(_ _)m )
なお、現時点では MySQL のみの対応となっています。
はじめに
OpenPNE 3.3.0 は開発版であり、不安定な可能性のある変更でも取り入れられます。
そのため、 OpenPNE 3.3.0 の安定性自体の保証がされていません。
また、本記事で紹介する OpenPNE 2.12.x からの移行措置については現時点で海老原の環境 (Debian sid, MySQL 5.1.41, PHP 5.2.11-2) 以外での動作確認をおこなっていません。何か問題があったときにもご自分で対処できる方を除き、運用中の SNS の OpenPNE 2.12.x から OpenPNE 3.3.0 へのアップグレードは控えてください。
動作レポート募集
前述のように、海老原の開発環境でしか動作確認をおこなっていません。
公式 SNS のマスク済みデータ、テスト環境のデータ、海老原の開発用のデータなどの複数のデータでの検証をおこない、発覚したバグについては対応していますが、まだまだ検証が足りていないです。
そこでみなさんには、是非運用中の SNS の「テスト用のデータで」 OpenPNE 3.3.0 へのアップグレードを試していただき、
- アップグレード時にエラーが出ることなく完了したかどうか
- アップグレードに掛かった時間(アップグレード完了時に秒単位で出力されます)
- アップグレード中の使用メモリ量(最大値)(アップグレード完了時に MB 単位で出力されます)
- アップグレード後の動作確認で確認できたバグ
- 試してみた環境の情報
などの情報をこのエントリのコメント欄に書いたり、 sns.openpne.jp で海老原にメッセージを送ったり、 Twitter で @co3k 宛に話しかけたり #op3dev ハッシュタグ付きでつぶやくなどの形で報告していただければと思います(もちろんバグなどは redmine.openpne.jp にチケットを作る形でもよいと思います)。
また、もし可能であれば http://github.com/openpne/OpenPNE3 を fork し、修正を pull request していただければ、小躍りしてなるべく早く修正を取り込みます!
みなさんのご協力によって、 OpenPNE 2 からの移行が問題なくおこなえるようになり、 OpenPNE 3 の発展に繋がるのを楽しみにしています。
※ちなみに、海老原の MacBook Pro (Mac OS 10.6, 2.53 GHz Intel Core 2 Duo) の VMWare Fusion 2 で飼っている Debian sid (メモリは 512 MB 割り当て) で検証したところ、公式 SNS のデータコンバートの所要時間は約 5.8 分、コンバート中に PHP に割り当てられたメモリの最大値は 50.50 MB でした。ホストマシン側でバリバリ作業中だったり、 VM での検証だったり公式 SNS のデータ量がそこまで大きくなかったり(1 GB 程度)といろいろ怪しいところのある数値ではありますが、なにかの参考になればと思います。
実際にアップグレードしてみる
それでは、実際にアップグレードしてみます。
動作環境の確認
OpenPNE3 は以下のような環境で動かすことを想定しています(セットアップドキュメントより引用)。
- Apache
-
- mod_rewrite を使用可能
- PHP5.2.3 以降
-
- PHP の mbstring 拡張モジュールを使用可能
- PHP の XML 拡張モジュールを使用可能
- PHP の PCRE 拡張モジュールを使用可能 (UTF-8 サポート)
- PHP の PDO 拡張モジュールを使用可能 (利用する DBMS のドライバも含む)
- PHP の JSON 拡張モジュールを使用可能
- PHP から GD ライブラリを使用可能 (JPEG/GIF/PNG サポート)
- PHP の mcrypt 拡張モジュールの使用を推奨
- PHP の APC 拡張モジュールの使用を推奨
MySQL4.1以降(5.1 以降を推奨)
なお、今回紹介する手順は、シェル環境が使用できることを想定しています。たとえば SSH でのログインができないレンタルサーバなどではこの手順でアップグレードすることはできませんのでご注意ください。
OpenPNE 3 の設置
まず OpenPNE 3 を入手してください。 ZIP アーカイブをダウンロードして展開してもよいですし、 GitHub からリポジトリを clone してきても構いません。
その後、 OpenPNE3 のソースコード内にある web ディレクトリが、ウェブサーバの公開領域となるように設置してください。
初期設定
アップグレードのために、いくつかの設定をおこなう必要があります。
まず、 config/ProjectConfiguration.class.php.sample を config/ProjectConfiguration.class.php としてコピーします。
$ cp /path/to/OpenPNE3/config/ProjectConfiguration.class.php.sample /path/to/OpenPNE3/config/ProjectConfiguration.class.php
次に、データベースの設定をおこないます。データベースの設定をおこなうには、以下のようなコマンドを実行する必要があります(DSN やユーザ名、パスワードは各自の環境に合わせて変更してください。詳細は ./symfony help configure:database をご覧ください)。
なお、ここで指定するデータベースは必ず OpenPNE2 のデータベースと同じものにしてください。
$ ./symfony configure:database "mysql:host=localhost;dbname=example" username password
その後、 OpenPNE2 の config.php を config/config.OpenPNE2.php としてコピーします。
$ cp /path/to/OpenPNE2/config.php /path/to/OpenPNE3/config/config.OpenPNE2.php
事前準備
設定が終わったら、いくつかコマンドを実行してみます。
まず、プラグインをインストールします(おそらく 3.3.0 時点では「You must provide a “config_dir” option.」というエラーが出るはずですが無視してください。 3.3.1 では直します!)。
$ ./symfony opPlugin:sync
次に、モデルに関するクラスファイルの構築をおこないます。
$ ./symfony doctrine:build --all-classes
次に、各ディレクトリのパーミッションを適切なものに設定します。
$ ./symfony openpne:permission
アップグレード
それではアップグレードをおこないます。以下のコマンドを実行してください。
$ ./symfony openpne:upgrade-from-2
2.14 で追加されたテーブルなどへの対応はおこなっていませんが、 2.14 でも(こちらで確認した限りでは)アップグレードはおこなえます。その場合は以下のコマンドを実行してください。
$ ./symfony openpne:upgrade-from-2 --origin=2.14
コマンドを実行すると、アップグレードが開始され、アップグレードの過程が出力されていきます。
アップグレードはいくつかの手順に分けておこなわれます。たとえば diary という手順を実行する場合、「>> upgrade Processing diary」と表示され、 diary という手順の実行が完了した場合、「>> upgrade Processed diary (x.xx sec)」xと表示されます。エラーが発生した場合は(端末が対応していれば)赤背景でエラーメッセージが表示されます。その場合、その手順でおこなった操作を取り消して、次の手順を実行します。
エラーの原因となるデータが修復されるか、もしくは OpenPNE3 側のバグが修正され、アップグレードが正常におこなえるようになった場合、以下のようにコマンドを実行することで失敗した手順のみを再度実行することができます。
$ ./symfony openpne:upgrade-from-2 --rules=diary
これは複数指定することもでき、たとえば、以下のようにして実行できます。
$ ./symfony openpne:upgrade-from-2 --rules=diary --rules=skin_config
注意事項など
アップグレードに際していくつか注意事項があります。
- ・3.3.0 の実装では、旧データは (コンバートの都合上 ALTER TABLE をする場面はあるものの) すべて残します。アップグレードを試す場合はディスクに充分な空き容量があることを確認してからおこなってください。最終的には OpenPNE3 側で未実装であるなどの理由がある場合を除き、データは適切なタイミングで削除する予定です。
- ・デザイン周り、ポータル周り、設定周りはまだ不完全なところが残っていると思います。この辺は単純なアップグレードの範疇を超え(本体側に互換性のための措置を用意する必要がある)たり、特にデザイン部分などは技術的にかなり困難な部分もあり、なかなか難しいところですが、極力対応していきたいと考えているのでフィードバックなどお待ちしています。
- ・2.12 の以下の機能に関するデータの変換は OpenPNE3 側で未実装なため対応していません
- ・BIZ 関連機能
- ・ポイント 関連機能
- ・アクセスログ関連機能
- ・お気に入り関連機能 (3.4.0 では対応予定)
- ・コミュニティ副管理者関連機能 (3.3.1 で対応予定)
- ・レビュー関連機能
- ・日記カテゴリ関連機能
- ・ファイル関連機能
- ・スケジュール関連機能
- ・フリーページ関連機能 (3.4.0 では対応予定)
- ・テンプレート設定関連機能 (3.4.0 では対応予定)
- ・ポータルクリエイターは「最新コミュニティ書き込み」「最新レビュー」「メンバーアクセスランキング」「コミュニティ盛り上がりランキング」「イベント予定」などのコンテンツが利用できません
- ・ポータルクリエイターの配色設定やカスタム CSS 設定などが利用できません
- ・ポータルクリエイターのレイアウト設定は「レイアウト2(4:6)」と同等のもの固定になります
- ・管理ユーザ(admin_user)は「全権限」が与えられているアカウントのみコンバートします
- ・ナビメニューの設定はコンバートしません
- ・OpenPNE2 形式の古い URL にアクセスした場合の措置がまだおこなわれていません
- ・config.php の設定値を現状まったく見ていません。見るようにします
- ・OpenPNE2 のナビメニューにないメニュー項目、 OpenPNE3 にない機能のメニュー項目はナビメニューからクリックできないようになっています。対応するにはナビメニューの設定を調節し、 CSS に記述を加えるか、 OpenPNE2 互換スキンを使わないように管理画面から opSkinClassicPlugin を無効にしてください
- ・まったくテストを書いていません……そろそろ書きはじめます