CONTENTS
Workbench Moderationモジュールのアンインストールで困った方へ
こんばんは。 ぴころじーの竹川です。 経験のある方はそう多くはないかもしれません。むしろ、この症状になること自体がおかしいと思うのです。
今回のテーマは、正常にアンインストールできないモジュールです。
正常にアンインストールできないと言っても、アンインストール自体ができないものや、アンインストールするとDrupalの挙動がおかしくなるものがあります。
今回取り上げるのは、私もついこの前、4日間ほどかけて解答を出したモジュール「Workbench Moderation」の話題です。
なお、環境はDrupal 9.5.9、Workbench Moderation 1.7.0となっております。
Workbench Moderationとは
このモジュールは、その名前の通り、モデレーション(編集や公開の権限)を制御するモジュールです。一緒に、Workbenchモジュールと、Workbench emailモジュールをインストールして使います。
コトの経緯
今回のプロジェクトで不要になったため、アンインストールしました。よくあることです。そして、普通にアンインストールが完了しました。ここまではよかったのです・・・。
ふとしたことから、コンテンツタイプの権限管理を確認したことがコトの発端です。
エラーが出るんです。しかも、クリティカルなやつが・・・。
これってダメなやつじゃ。と、Workbench Moderationモジュールを再インストールすると治るので、原因のモジュールを特定しました。(この特定までに2日程かかりました。)
特定できたキッカケは、エラーログです。こういったエラーが出たら、エラーログを見ましょう!
moderation_stateが何とかとか言ってます。これから、なんとなくモデレーション関係のモジュールが原因だと推測できます。WorkbenchモジュールとWorkbench emailモジュールをアンインストールしても現象は出ないので、Workbench Moderationモジュールがビンゴだったのです。
原因の調査に明け暮れる(データベース編)
正直この原因を突き止める作業がしんどかったのです。Workbench Moderationモジュールをアンインストールすると、管理ビューやら何やら色々と残して消えていきます。いわゆる、後片付けをせずに何処かへ行ってしまう大人のような感じです。
moderation_stateとは何?ということから始まりました。
結論を申し上げると、moderation_stateとはデータべースのテーブルにある列です。Workbench Moderationモジュールをインストールするときに追加されます。しかし、アンインストールしてもこの列を消さないのです。
これが原因のひとつ。moderation_stateは、DrupalのContents typeであるカスタムブロック、ノード、タクソノミーターム、メディアを管理するテーブルに追加されるようです。
試しに、このテーブルにあるmoderation_state列を手動で消してみました・・・が、治りません。
もっともっと深いところに原因があるようです。
原因の調査に明け暮れる(モジュール編)
もうこうなると、どこがおかしいのか分からないんです。Workbench Moderationモジュールのソースをじっくり読む、・・・分からない。時間が流れていきます。
検索!「drupal workbench moderation uninstall moderation_state」グーグル先生お願い!
困っている人がたくさんいるみたいで、日本ではありませんが、海外でいくつかヒットしました。
ヒントになったのがこちらのサイトです。
そして解決の糸口をつかむ
データベースだけでなく、一緒に追加されているデータも消す必要があるということです。手動ではムリです。ほんとに・・・。
そこで、上記GitHubで公開されていたmy_module.install.phpを利用させてもらいました。Workbench ModerationモジュールをアンインストールしておかしくなっているDrupalに対して、my_module.install.phpを組み込んだWorkbench Moderationモジュールをインストールしたのです。
するとどうでしょうか。解決したのです。(ノードだけ)
このファイルの内容は、
- データベース全体を調べてmoderation_state列があれば削除する。
- コンテンツタイプnodeに対して、変更された項目を削除する。
というものです。
※ 手動で消したあと、バックアップから戻して再挑戦したので、消えていることを確認しました!
※ ノードに関しては正常に表示されるようになりました。
タクソノミーターム、メディア、およびカスタムブロックでは引き続きエラーが出ていますが、光が差したように思いました、ほんとに。
これで、どのようにすればよいか流れをつかむことができました!
そして、今回適用するのはWorkbench Moderationモジュールのインストールファイルworkbench_moderation.installへ対してのパッチです。パッチはこちらです。
パッチの使い方
- Workbench Moderationをインストール済みのDrupalを用意する。
- <document root>/web/modules/contrib/workbench_moderationに上記のパッチファイルを配置する。
- Workbench Moderationのディレクトリへ移動してパッチを適用する。
$ patch -u < 2762777-19-facilitate-uninstall.patch - Workbench Moderationをアンインストールする。
- 各コンテンツタイプにて、権限の管理が正常に表示されていることを確認する。
- データベースにログインして、moderation_state列がないことを確認する。
という流れになります。
私はこの方法で、正常にDrupalを復旧することができましたが、動作の保証をするものではありません。あくまで自己判断、そして、何かあってもいいように必ず事前にバックアップを取りましょう。
この問題はまだ解決しない・・・のです
ここまで書いておいて非常に申し訳ないのですが、このパッチを当ててもタクソノミー、メディア、カスタムブロックについては解決しておりません。ノードに関しては解決します。
このパッチは、8.x-1.x用と書いてありましたので、最新版1.7.0には対応しているはずなのですが、もう少し様子を見ていきます。進展があれば、更新していきますね。