はじめに
Drupal9へのアップグレードについては,以前書いた。
Drupal10へのアップグレードは,それに比べて簡単との開発者側の説明だったが,案の定そこまで楽というわけにはいかなかった。
利用しているモジュールがそう簡単にバージョン追従してくれない。10.0は諦めて,10.1まで待ったが,バージョン追従に要した時間は,Drupal9の時以上だった印象がある。私が単にさぼっていただけかもしれないが。
バージョンアップのための調査
今回のアップグレードで,一番助かったのは,バージョンアップのために必要な情報を提供してくれるモジュールが存在したことである。ただし,このモジュールが示している状態は,必ずしもわかりやすいものでは無く,何を示しているのかに理解する時間は,それなりに要した。加えて,残念なことに,インジケーターが100%を示しているのに,なお,アップデートできない,と言う現象は普通に起こる。
- Drupal Upgrade Status の導入
composer require "drupal/upgrade_status"
./vendor/bin/drush en upgrade_status
- 以下にアクセス
https://xxx.xxx.xxx/ja/admin/reports/upgrade-status
- 「更新」と書かれた欄にあるモジュールは,そこ示されたバージョンにアップデートする
私は,Drupalのモジュールページを各個に開き,そこにあるcomposerコマンドの例示をそのままコピーした,
例)
composer require 'drupal/captcha:^2.0'
- 「削除」と書かれた欄にあるモジュールは,諦めるか,バージョンが追従されるまで待つか検討する。
例)
./vendor/bin/drush un captcha
composer remove drupal/captcha
./vendor/bin/drush cr
- 「Compatible with next major Drupal core version」で適用不可になったもの
モジュールでインストールすることで解決する場合がある
コアから外れた機能のモジュールインストール
- テーマbartikはコアではサポートされなくなったので,必要ならサードパーティのテーマとしてインストールする。
composer require drupal/bartik
- カラー機能はコアから外れた。必要ならサードパーティのテーマとしてインストールする。
composer require "drupal/color:^1.0"
アップグレードチェック
upgrade statusにあるインジケーターが100%になれば,アップグレード可能になるのが原則である。しかし,その状態でもアップデートに失敗してしまう事象は頻出する。
それでも失敗する
私の場合,module_missing_message_fixerモジュールは,コンパチブルと表示されていたのに失敗してしまった。
大丈夫である事を確認して削除した。
composer remove drupal/module_missing_message_fixer
アップグレード準備
- コアのバージョンだけあげておき,実行は後から
composer require 'drupal/core-recommended:^10' 'drupal/core-composer-scaffold:^10' 'drupal/core-project-message:^10' --update-with-dependencies --no-update
- コアモジュールも入れている場合は,それもアップグレードするが,私の場合,入れているかどうかが判明せず,アップデートする段階で失敗するかどうかで判断した。
composer require drupal/core:"^10.0" --no-update
アップグレード実行
- 通常のアップデートコマンドで
composer update
- drushもバージョンを上げておく
composer require 'drush/drush:^12' -W
- キャッシュを再構築
./vendor/bin/drush cache:rebuild
- データベースアップデート
./vendor/bin/drush updatedb
エラー対策
モジュールを削除する場合,そのモジュールが実際に使われてしまっているのであれば,削除前にアンインストールしなければならない。
例)
./vendor/bin/drush un ckeditor_readmore
それを忘れるとデーターベースのアップデート時に不整合が起こりアップデートできない。
しかもアップデートそのものは終わっているので,そのモジュールの再インストールもできない。
この場合は,データベースからモジュールに関する記述を削除する。
例)ckeditor_readmoreの削除
./vendor/bin/drush cdel core.extension module.ckeditor_readmore
データベースアップデートも,ファイル削除が発生するので,削除権限のあるユーザにする
例)
sudo -u apache ./vendor/bin/drush updatedb