OpenPNE2系→OpenPNE3系へのアップデート
結論
情報がかなり少なくて悪戦苦闘
最終的には、2.14.9→3.6.5→3.8.10という順番でアップデートに成功した
手順
OpenPNE3.6.5にまずアップデート
OpenPNE2.14からのアップデートですよ
# wget https://github.com/openpne/OpenPNE3/archive/OpenPNE-3.6.5.tar.gz
# tar xvfz OpenPNE-3.6.5.tar.gz
# mv /usr/local/src/OpenPNE3-OpenPNE-3.6.5/ /usr/local/
# mv /usr/local/OpenPNE3-OpenPNE-3.6.5/ /usr/local/OpenPNE36
# mysql -uroot -p openpne < /usr/local/src/openpne2.sql
# cp /usr/local/OpenPNE36/config/ProjectConfiguration.class.php.sample /usr/local/OpenPNE36/config/ProjectConfiguration.class.php
# cp /usr/local/OpenPNE36/config/OpenPNE.yml.sample /usr/local/OpenPNE36/config/OpenPNE.yml
# vi /usr/local/OpenPNE36/config/OpenPNE.yml
# cp /usr/local/OpenPNE2/config.php /usr/local/OpenPNE36/config/config.OpenPNE2.php
※PEARのTar.phpが古くPluginインストール時にエラーになってしまうのでその対策
↓これは日記プラグインインストール時のエラーだけど、こういうエラーが大量に出る
# ./symfony opPlugin:install opDiaryPlugin -r 1.5.0
>> plugin installing plugin "opDiaryPlugin"
>> sfPearFrontendPlugin downloading opDiaryPlugin-1.5.0.tgz ...
>> sfPearFrontendPlugin Starting to download opDiaryPlugin-1.5.0.tgz (64,612 bytes)
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin .
...
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin ...done: 64,612 bytes
>> sfPearFrontendPlugin could not extract the package.xml file from
>> sfPearFrontendPlugin "/usr/local/OpenPNE38/cache/.pear/opDiaryPlugin-1.5.0.tgz"
>> sfPearFrontendPlugin Download of "http://get.openpne.jp/opDiaryPlugin-1.5.0.tgz"
>> sfPearFrontendPlugin succeeded, but it is not a valid package archive
>> sfPearFrontendPlugin Invalid or missing remote package file
Plugin "opDiaryPlugin" installation failed:
Tar.phpを新しくしておきます
# cd /usr/local/src/
# wget http://download.pear.php.net/package/Archive_Tar-1.3.11.tgz
# tar xvfz Archive_Tar-1.3.11.tgz
# mv /usr/local/OpenPNE36/lib/vendor/PEAR/Archive/Tar.php /usr/local/OpenPNE36/lib/vendor/PEAR/Archive/Tar.php.bk
# cp /usr/local/src/Archive_Tar-1.3.11/Archive/Tar.php /usr/local/openpne3/lib/vendor/PEAR/Archive/Tar.php
あとは、下記コマンドを実行後、httpd.conf、.htaccessなど変更してブラウザからアクセスできればOK
# ./symfony opPlugin:sync
OpenPNE3.8.10にアップデート
# wget https://codeload.github.com/openpne/OpenPNE3/legacy.zip/OpenPNE-3.8.10
# unzip OpenPNE-3.8.10
# mv /usr/local/src/openpne-OpenPNE3-7902757/ /usr/local/
# mv /usr/local/openpne-OpenPNE3-7902757/ /usr/local/OpenPNE38
# cp /usr/local/OpenPNE38/config/ProjectConfiguration.class.php.sample /usr/local/OpenPNE38/config/ProjectConfiguration.class.php
# cp /usr/local/OpenPNE38/config/OpenPNE.yml.sample /usr/local/OpenPNE38/config/OpenPNE.yml
# vi /usr/local/OpenPNE38/config/OpenPNE.yml
# cp /usr/local/OpenPNE36/config/databases.yml /usr/local/OpenPNE38/config/databases.yml
symfonyでインストール
# ./symfony doctrine:build-model
# ./symfony cc
# ./symfony plugin:publish-assets
ディレクトリ変更とかははぶいているので、このまま上から順番に打ち込んでいけばOKってわけではない
流れはこんな感じで大丈夫かと思うので自分の環境に合わせて適宜読み替えてください。
エラーもろもろ
さて、インストールしたはいいが、エラーが大量に出ていてこのままでは使い物にならない
opSkinClassicPlugin_loginでエラー
さて、インストール終わり♪さぁ動かそう♪と思ったら、トップページにこんなメッセージ
現在、サーバが混み合っているか、メンテナンス中です。
ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
Currently, our service is too busy or is under maintenance.
We're sorry and please retry accessing later.
ググってみると、同じようなエラーに悩まされている人が2人...たった2人!?
デバッグモードのようなものがあるらしく、
pc_frontend_dev.php
を見ろと書いてある。見てみると、こんな感じのメッセージ?これはApacheのログの方だったかな...
500 | Internal Server Error | sfConfigurationException
The route "opSkinClassicPlugin_login" does not exist.
調べてみても全然ひっかからない
そして3日ほど悩んだ。いやほんとに。
このプラグイン(opSkinClassicPlugin)をはずしてみても、このエラーが出る
これはDBが悪さをしているなーと思ったのでDBのdumpファイルで検索するとようやく発見。
mysql> select * from sns_config where name = 'external_pc_login_url';
+----+-----------------------+----------------------------+
| id | name | value |
+----+-----------------------+----------------------------+
| 49 | external_pc_login_url | @opSkinClassicPlugin_login |
+----+-----------------------+----------------------------+
1 row in set (0.00 sec)
どうやらexternal_pc_login_urlが指定されていると、ログインするときに強制的に読みにいっちゃう?のか?
消すのは不安なので、とりあえずUPDATEして様子を見る
mysql> update sns_config set name='_external_pc_login_url' where id=49;
そしてアクセスすると...
出た―!普通のログイン画面出た―!
ファイルの置き換え
さて、大きなエラーは消えたが、pc_frontend_dev.phpを見ると、色々エラーが出てることに気づく
どうやらPHP5.5&ログモードを厳しめで動かしていると、古いスクリプトがエラーになっちゃうみたい
エラーが出ているファイルをひたすら修正
/usr/local/OpenPNE38/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php:155
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');
↓
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null);
/usr/local/OpenPNE38/lib/vendor/symfony/lib/exception/sfException.class.php:103
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');
↓
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null);
/usr/local/OpenPNE38/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Query/Abstract.php:1152
return array_diff($componentsAfter, $componentsBefore);
↓
$diff = array();
foreach($componentsAfter as $key => $val) {
if(!isset($componentsBefore[$key])) {
$diff[$key] = $val;
} elseif(is_array($componentsBefore[$key]) && !is_array($val)) {
$diff[$key] = $val;
}
}
return $diff;
/usr/local/OpenPNE38/lib/vendor/symfony/lib/response/sfWebResponse.class.php
return preg_replace('/\-(.)/e', "'-'.strtoupper('\\1')", strtr(ucfirst(strtolower($name)), '_', '-'));
↓
strtr(ucfirst(strtolower($name)), '_', '-');
return str_replace(array('\'$1$3\'','\'$2$4\'','\'$1\'', '\'$2\'', '$1', '$2'),array('$matches[1].$matches[3]','$matches[2].$matches[4]','$matches[1]','$matches[2]','$matches[1]','$matches[2]'),$name);
/usr/local/OpenPNE38/lib/vendor/symfony/lib/util/sfToolkit.class.php:362
return preg_replace(array_keys($replacePairs), array_values($replacePairs), $search);
↓
foreach($replacePairs as $pattern => $replacement)
{
if (preg_match('/(.*)e$/', $pattern, $matches))
{
$pattern = $matches[1];
$search = preg_replace_callback($pattern, function ($matches) use ($replacement) {
preg_match("/('::'\.)?([a-z]*)\('\\\\([0-9]{1})'\)/", $replacement, $match);
return ($match[1]==''?'':'::').call_user_func($match[2], $matches[$match[3]]);
}, $search);
}
else
{
$search = preg_replace($pattern, $replacement, $search);
}
}
return $search;
こんなにたくさん勝手に書き換えていいのか??自己責任で...
まだあるのかもしれないけど、とりあえず動けばいい、の精神で
シンボリックリンク?エイリアス?
pc_frontend_dev.phpで画像が表示されないので、とりあえず張ってみた
ApacheのAlias指定の方がいいのかなぁ...
# ln -s /usr/local/OpenPNE38/lib/vendor/symfony/data/web/sf /usr/local/OpenPNE38/web/sf
opDiaryPluginインストール
さて、ログイン後、ホーム画面は表示されるんだけど、各種日記等の個別ページに行こうとするとなんか足りないと言われる
Fatal error: Class 'DiaryCommentForm' not found in ...
ググっても1件もない
私だけですか...色々やりすぎておかしくなっちゃったのかな
# ./symfony opPlugin:install opDiaryPlugin -r 1.5.0
プラグインを再インストール?してあげればOK
ちなみにTar.phpが古いと失敗するので、Tar.php新しくするのは必須
この時初めて知ったんだけど、OpenPNE3からは日記書くのもプラグインいれなきゃだめなのね
もっとマニュアルとかにガンガン書いておいてくれてもいいんじゃないかしら...
日記書くのなんて基本機能なんだからそのくらい付けておいてくれてもいいんじゃ...
大量のPHPエラー
Strict Standards: Non-static method Calendar_Engine_Factory::getEngine() should not be called statically, assuming $this from incompatible context in /usr/local/OpenPNE38/lib/vendor/PEAR/Calendar/Calendar.php on line 210
pc_frontend_dev.php見てるとこういうのが大量に出る
これはPHPのエラーレベルにE_DEPRECATEDが加わったためで、将来的にサポートされなくなる関数が使用されているときに出る警告らしい
場当たり的な対処かもしれないけれど、とりあえずエラーレベルを変更次のymlファイルを編集してエラーレベルを変更
/apps/pc_frontend/config/settings.yml
/apps/pc_backend/config/settings.yml
/apps/mobile_frontend/config/settings.yml
/apps/mobile_mail_frontend/config/settings.yml
dev:
.settings:
error_reporting: <?php echo (E_ERROR & ~E_NOTICE & ~E_PARSE)."\n" ?>
web_debug: true
cache: false
no_script_name: false
etag: false
てか、こんな対処するしかないのー!?
と、このあたりでOpenPNE導入はちょっと...やめたいなと思い始めてきた(こんなんだと全世界に公開、はナシかなぁ。社内SNSくらいなら...アリ?)
---
とりあえずここまで。
もう少し色々使ってみたらまた、かくかも