今回はOroPlatformをベースにしたアプリケーションのアップデート方法についてご紹介します。

OroPlatformは、PHPフレームワーク・Symfonyをベースに開発されたビジネスアプリケーションフレームワークです。
基本的にこのエントリでご紹介する方法で、OroCRMやOroCommerce、Akeneo PIMなどもアップデートが可能です。

アップデートを行う前に

今使っているバージョンの確認

OroPlatformには、2017年3月現在で、1系と2系があります。
2系は主にOroCRMやOroCommerceで使われていますが、ほかのアプリケーションでは多少異なります。

今回はOroPlatform 1系同士、2系同士のアップデートについて取り上げます。
OroPlatform 1系から2系へのアップデートについては対象外なので、ご注意ください。

バックアップの作成

作業前にバックアップを作成しておきましょう。
壊しても良い環境の場合は取らなくても良いですが、稼働中の環境の場合は必ず事前にプログラムとデータベースのバックアップを作成し、不測の事態に備えましょう。

アップデート作業の実施

バックアップが作成できたら、アップデート作業に取り掛かりましょう。
できれば作業者以外の人がシステムにアクセス出来ないよう、アクセス制限を掛けたり、Cronジョブを止めておくことをおすすめします。

composer.json の確認

まず最初に、composer.jsonの内容を確認します。特に何もカスタマイズしていない場合は問題ありませんが、追加機能をインストールしている場合や、独自機能をcomposer経由でインストールしている場合にはcomposerがそれらのバージョンの依存関係をアップデート前にチェックするので注意が必要です。

もし、どれか1つでも依存関係が正しく解決できない場合は、処理が途中で止まります。
この時点でアップデート先のバージョンに利用しているモジュールなどが対応しているかをチェックしておいたほうが良いでしょう。
(もちろん、composerの指示に従って、1つずつ解消しても構いません)

composer update の実行

アップデートを行う際は、composerでupdateコマンドを実行するだけです。

composer update

だけで本来は良いのですが、関連するライブラリが多いため、PHP側のメモリが不足しがちです。
例えば以下のようにメモリ上限を一時的に引き上げるオプションを指定することで、エラーにならずにアップデートができるでしょう。

php -dmemory_limit=3072M /pat/to/composer update

途中経過が知りたい場合は、

php -dmemory_limit=3072M /path/to/composer update -vvv

のように出力オプションを追加することで、詳しい経過を知ることができます。

コマンドを実行してから終了するまでにかかる時間はサーバー性能によって変わるので、気長に待ちましょう。

キャッシュなどの削除

composer update が完了したら、以下のコマンドを実行し、キャッシュやCSSなどを削除します。

rm -rf app/cache/*
rm -rf web/js/*
rm -rf web/css/*

コマンドの実行を間違えると大変なことになるので、実行の際は十分気をつけてください。

app/console でアップデート処理

最後にデータベースやアプリケーションのアップデートを行います。

php app/console oro:platform:update --env=prod

を実行すると、データベースやアプリケーションのアップデートが行われます。
うまくいかない場合は、

php app/console  doctrine:schema:validate
php app/console  doctrine:schema:update

で、データベースに対して行われる変更内容などをチェックしてみてください。

動作チェック

すべての作業が完了したら、動作チェックを行います。
OroPlatformベースのアプリケーションは、JavaScriptを多用しているので、サーバーサイドとクライアントサイドのどちらで問題が起きるかわかりにくい側面があります。
ブラウザの開発者ツールを表示した状態で、エラーなどが起きていないか細かくチェックしましょう。