オートアップデートは、baserCMSのプログラム群の更新とともに、必要であれば、データベースのマイグレーションとアップデートスクリプトを自動実行する機能です。
baserCMSは、ベースシステムとしてテーマやプラグインにてカスタマイズをする事を前提としたパッケージのため、オートアップデート機能の仕様として、全自動で知らぬうちに更新してしまう事は望ましくありません。
そのため、baserCMSのオートアップデートの仕様としては、アップデート情報の取得ができ、利用者が手動でアップデート実行ボタンをクリックすることで、プログラムデータの取得や、データベースのマイグレーションを自動実行できるという仕様になっています。
サイト基本設定にて、「管理システムのアップデート通知を有効にする」にチェックが入っていることを前提として、Composer の packagist より RSS で取得します。
https://packagist.org/feeds/package.baserproject/baser-core.rss
アップデート実行の際は、Composer を利用するため、PHPのパス情報を必要とします。
アップデート画面において、「PHP CLI の実行パス」が自動的に入力されている状態であれば問題ありませんが、入力されていない場合は確認が必要です。PHP CLI のパス を参照してください。
CakePHPのシェルを利用して、別プロセスとして、Composer を実行するプログラムを実行します。
その際、baserCMSのプログラムが /vendor
に配置されていることを前提としますが、開発版では、baserCMSのプログラムが /plugins
に配置されているため動作しません。
そのため、リリースの際には、 リリースパッケージ作成コマンド を実行し、/plugins
配下を削除して配布します。
CakePHPのシェルを利用して 別プロセスとして、Migration を実行します。
バージョンに応じて設置したアップデートスクリプトを実行します。
アップデートスクリプト実装する場合は、次の場所に配置します。
# version-number は、1.0.1 のようにアップデート対象のバージョンとします。
/plugins/{plugin-name}/config/update/{version-number}/updater.php
アップデートスクリプトが失敗した場合、プログラムファイルの更新や、データベースの更新をロールバックし、元のバージョンに戻します。ただし、アップデートスクリプトで行った変更は元に戻りませんので注意が必要です。
site_configs
テーブルの name
が version
となっているレコードの value
の値を更新します。
将来的には、baserマーケットと連携し、直接プログラムのインストールとアップデートができるようにすることを検討していますが、当面は、/plugins/
フォルダに手動で配置することでインストールとアップデートを行います。(2023/3/29 現在)
開発環境でアップデートのテストを行うには、baserCMSを /vendors/
フォルダにインストールしなおす必要があります。
/plugins/
フォルダ内のファイルを全て削除します。
monorepo-builder の関係で、composer.json
内に、replace
の定義があるが、上記構成を前提とした場合にこれがあると、Composer が正常に動作しないため削除します。
baserCMSのインストーラー、または、Composer コマンドを直接実行して、/vendor/
フォルダ内に baserCMSをインストールします。
phpMyAdmin 等で、データベースに直接アクセスし、site_configs
テーブルの version
の値を古いバージョンに書き換えます。
管理システム内にて、アップデート通知が表示されていることを確認しアップデートのテストを実行します。
SSHでログインし、次の手順を実行してください。
# PHPのパスを通した上で実行
curl -sS https://getcomposer.org/installer | php
./composer.phar self-update
# 5.0.4 に更新する場合
./composer.phar require baserproject/baser-core:5.0.4
# 全てのプラグイン分、マイグレーションを実行する必要あり
bin/cake migrations migrate -p BaserCore
現在、対応方法がありません。v5.0.4
スクリプトを実行するコマンドを実装予定。
site_configs
テーブルの name
が version
となっているレコードの value
の値を更新します。