Drupal 11.1.0 にアップデート

Drupal

◇アップデート実行前の準備

モジュール Display Suite Extras

自分の場合はモジュール Display Suite Extras を削除する必要があった。このモジュールが有効になっていると、apache のエラーログに次のようなエラーが出る。

[Tue Dec 17 22:03:44.421339 2024] [proxy_fcgi:error] [pid 631:tid 631] [client 192.168.1.60:39738] AH01071: Got error 'PHP message: Drupal\\Core\\DependencyInjection\\ContainerNotInitializedException: \\Drupal::$container is not initialized yet. \\Drupal::setContainer() must be called with a real container. in /var/www/dp.jisaba.life/web/core/lib/Drupal.php on line 169 #0 
/var/www/dp.jisaba.life/web/core/lib/Drupal.php(414): Drupal::getContainer()\n#1 
/var/www/dp.jisaba.life/web/modules/contrib/ds/modules/ds_extras/ds_extras.module(44): Drupal::config()\n#2 
/var/www/dp.jisaba.life/web/core/lib/Drupal/Core/Hook/HookCollectorPass.php(94): ds_extras_module_implements_alter()\n#3 
/var/www/dp.jisaba.life/vendor/symfony/dependency-injection/Compiler/Compiler.php(73): Drupal\\Core\\Hook\\HookCollectorPass->process()\n#4 
/var/www/dp.jisaba.life/vendor/symfony/dependency-injection/ContainerBuilder.php(814): Symfony\\Component\\DependencyInjection\\Compiler\\Compiler->compile()\n#5 
/var/www/dp.jisaba.life/web/core/lib/Drupal/Core/DrupalKernel.php(1380): Symfony\\Component\\DependencyInjection\\ContainerBuilder->compile()\n#6 
/var/www/dp.jisaba....', referer: https://dp.jisaba.life/admin/modules

自分には原因が判らなかったから、このまま Gemini に貼り付けて聞いてみたところ、根本原因と解決策の提案の中に、上記モジュールについて記述されていた。なので、Display Suite Extras をアンインストールしたところ、無事にアップデートできた。

 

PHP のバージョン

今のところ PHP 8.3 までが動作要件で、8.4 はサポートされていない。なので、もしサーバーの PHP のバージョンが 8.4 になっていたら、次のコマンドで 8.3 にしておくこと。
※Debian 系の場合。

 sudo update-alternatives --config php

最初、気付かずにテストサイトでアップデートを実行したらエラーだらけになった。

 

◇アップデート実行時のエラー

アップデートを実行するときは、いつも本番運用中のサーバーとほぼ同じ構成のテストサイトで試してから本サイトで実行している。今回も Drupal 11.1.0 のサイトを参考に、いつもと同じ次のアップデートコマンドを実行した。

composer update "drupal/core-*" --with-all-dependencies

すると、コンソール画面で真っ赤な次のエラーメッセージが出た。

Could not delete /var/www/test.jisaba.life/web/sites/default/default.services.yml: 

こちらのとおり、web/sites/default に権限が無いから新しい default.services.yml に書き換えられないためらしい。
なので、次のとおり書き込み権限を付与してからアップデートを実行すれば OK。

chmod u+w web/sites/default

アップデートを実行したら無事に新しいファイルが書き込まれる。それから次のコマンドで書き込み権限を元に戻す。

chmod u-w web/sites/default

 

あとは通常どおり、データベースを更新してアップデート完了となった。