Drupal 8のwebfromのバージョンアップをサボっていると、バージョンアップするとパラメータのデータ型が異なる、と致命的なエラーになり動作しなくなります。
最初、エラーメッセージで検索すれば対応策が直ぐに見つかる、と思って検索しました。しかし、的確な対応方法を記載したページが検索されません。対応策は簡単です。FAQ的な情報ですが、誰かの役に立つと思うので対応策を記載します。
問題の原因はデータベーススキーマの更新です。他のデータベーススキーマ更新が必要なモジュールの場合も同様の方法で更新できるはずです。
webformの更新方法
webfromを更新すると動作しなくなる原因はデータベースの内容が更新されていないことが理由です。webformはデータベーススキーマも更新するモジュールです。このため、スキーマも更新しないと正常に動作しません。
データベーススキーマの更新は「各リリース」に「それぞれ」入っています。つまり、今使っているwebfromのバージョンから「一つずつ」バージョンアップし、「一つずつ」update.phpを実行する必要があります。
https://yoursite.example.com/admin/reports/updates/update
にアクセスし、webformに更新があると「webformは手動またはdrushで更新するように」との旨のメッセージが書いてあります。これは「一つずつバージョンアップし、一つずつupdate.phpを実行しなさい」という意味です。
バージョンアップに必要な情報とデータ
- 現在のwebformのバージョン
(https://yoursite.example.com/admin/reports/updates/update などで確認。更新版がある場合は表示される) - 更新ターゲットとなるwebformのバージョン
(https://www.drupal.org/project/webform/releases/ で確認) - 現在のwebformから最新のwebformバージョンまでの、アーカイブ全て
(curl -OL https://ftp.drupal.org/files/projects/webform-8.x-5.0-XXXX.tar.gz などでダウンロード) - webformモジュールのインストール場所
(tar/zipアーカイブからインストールしている場合ドキュメントルートの/module/webform、composerでインストールしている場合は/module/contrib/webform)
バージョンアップ手順
例えば、執筆時点の最新webformリリースは
- webform 8.x-5.0-rc18
です。インストールしているバージョンが
- webform 8.x-5.0-rc13
だとすると、
- webform 8.x-5.0-rc14
- webform 8.x-5.0-rc15
- webform 8.x-5.0-rc16
- webform 8.x-5.0-rc17
- webform 8.x-5.0-rc18
を一つずつ、順番に手動で更新(ソースを入れ替え)し、その後に
- https://yoursite.example.com/update.php
を実行してスキーマを更新する、を繰り返すと正しくwebfromを更新できます。
Drupal 8用のwebformは開発版扱いなので、スキーマ更新情報は直前のリリースからの差分しか入っていないようです。RC版でも色々と新しい機能が追加されていて、スキーマ更新が必要となっています。
これからのDrupalのインストールと更新
Drupalとそのモジュールのインストール方法と更新方法は迷走していました。
- ソース配付版からインストール&更新 (Web UI含む)
- Drushによるインストール&更新
- Composerによるインストール&更新
3つも方法(Web UIを入れると4つの方法)があり「それで、結局どれを使えば一番良いのか?」という状態でした。
最近、Drupalのオンラインマニュアルが更新されています。どうもComposerによるインストールと更新がこれからのDrupalの標準インストール&更新方法になるようです。
The current/latest release is always found on the Download page. However, the recommended way to get the Drupal source code is to use Composer – a PHP dependency manager.
今まで安定性重視でソース配付版でインストール&更新していました。しかし、標準の方法がcomposerになるなら移行せざるを得ないでしょう。
試しに、最新のDrupal 8のリリース版にcomposer udpateを実行してみました。最新のDrupal 8リリース版でも、利用するパッケージのメジャーバージョンアップを含めて沢山アップデートされます。
The current/latest release is always found on the Download page.
ソース配付版が「現在/最新のリリース」としていますが、今のところこれは正確ではない表現です。ソース配付版のcomposer.jsonを使っていてもアップデートされるパッケージが多過ぎです。これではテスト無しでは怖くて使えません。
早いペースでDrupalマニュアルのインストールページなどが更新されているようですが、まだ作りかけの部分が見られます。composerベースのインストール&更新に移行するのは少し様子を見た方が良さそうで。(既にcomposerで安定稼働している方はそのままで構わないと思います)
例えば、このブログで取り上げたwebformもcomposerでもインストールできるのですが、/module/webformにインストールされているにも関わらず、/module/contrib/webformにインストールしてしまいます。そして、新しい方(/module/contrib/webform)は無視されます。
教訓
いろいろなインストール&管理方法が使えるのは、必ずしも良いとは限らない。
どのプロジェクトにも言えることですが、全てがベストプラクティス、ではありません。
これは言語やアプリを問わず同じです。例えば、エンタープライズ向けのJavaのフレームワークであるSpringにもいろいろと「こうした方が良い」「こうなっていてくれたら」と思う所が多々あります。
一応開発版であるwebformの更新は暗黙知として「一つずつ更新」が当たり前だと思いますが、マニュアルか更新ページに書いてある方が良いと思いました。マニュアルを書く方の労力も理解るので書いてないのがダメだ!とは言わないですが。(自分も正確かつ網羅的には書いていないので、努力目標にはしたいです)