CakePHP DebugKitが急に表示されなくなったときの対処法
[Tips] エラーメッセージが出る場合もある
「エラーメッセージ: SQLSTATE[HY000]: General error: 11 database disk image is malformed.」
ただ、画面になにも表示されない方が多い。私のVagrant環境では毎度表示されず焦っていた。
複数環境ある場合は、環境を複製して1から構築し直すのもあり。だけど面倒なので、なんとか解決したい。
<原因の一例>
私の場合は、Windowsの強制再起動→Vagrant/VirtualBoxが強制終了となり、ファイル破損したパターンだった。
<とにかく画面に表示させてみる>
① HTMLの下部にコードを埋め込んで強引に表示させる
<script id="__debug_kit" data-id="af2a44f1-a8a8-4f9a-a181-73c4507d4087" data-url="http://*****/" src="/debug_kit/js/toolbar.js?1608568047"></script></body>
</body>
</html>
→ body閉じタグ直前にscriptタグを追加する
→ data-urlのところは環境に合わせて適宜調整してください。
② Debugkitのiframeのスタイルを強引に書き換えてウィンドウ全体に表示させる
強引に表示させるとスタイルシートがバグっているor反映されないので、Chromeなら検証からスタイルシートを強引に書き換える
<iframe height="40" width="40" src="http://*****/debug-kit/toolbar/badf0b75-4308-421f-ae46-97de21e9a2c8" style="position: fixed; bottom: 0px; right: 0px; border: 0px; outline: 0px; overflow: hidden; z-index: 99999;"></iframe>
→ height・widthをそれぞれ100%に書き換える。srcは①で書き換えたものになっているハズ。
するとウィンドウ全体に表示されるので、エラー内容を確認する。
確認作業後はscriptタグを削除しておきましょう。
復旧作業後このタグが存在していると表示がおかしくなる可能性があります。
「エラーメッセージ: SQLSTATE[HY000]: General error: 11 database disk image is malformed.」の対応
大体は冒頭でも記載したこのエラーだと思われる。※ 違う場合は適宜対応してください。
下記作業でファイル削除後、ブラウザをリロードする前に、HTMLに追加したScriptタグは予め削除しておかないと表示がおかしくなるので注意
① /tmpにあるファイル【debug_kit.sqlite】を削除する
cache ・・・ 下層にフォルダが続く
sessions ・・・ 恐らく空
tests ・・・ 恐らく空
debug_kit.sqlite ← このファイルが破損している確率が一番高い
まずは、debug_kit.sqliteを削除して、ブラウザをリロードしてみる。
これで解決できることもあるが、できない場合は以下続ける
② /tmp/cache内のファイルを一通り削除する
もしかすると、debug_kit関連だけでいいのかもしれませんが、Cakeに関連するファイルを全部消してもブラウザで更新する度に復活するので、一通り消してリフレッシュするのもありということで全部消しています。
models
- myapp_cake_model_debug_kit_panels
- myapp_cake_model_debug_kit_requests
※ 以下、自分で作ったデータベースのテーブルに則った名称のファイルが続く
- myapp_cake_model_default_****
→ この辺りを全て削除する。
persistent
- myapp_cake_core_translations.cake.ja_JP
- myapp_cake_core_translations.debug_kit.ja_JP
- myapp_cake_core_translations.default.ja_JP
→ この辺りを全て削除する。
views
基本、なにもない?と思われる。
Gitを使っている人は、こんなファイルがあるかも。 > .gitkeep
これはCakePHPに関係ないので消す必要ない。あくまでCakePHPに関連するものだけ削除することがポイント!
それでもDebugKitツールバーが表示されない場合
ここまでやってもダメな場合は、環境を作り直した方が早いかもしれない。
自分の環境下でこの方法で解決できない事案が発生した際は、解決方法を色々検証してみたいと思っています。
以下の環境で検証した結果です。他のOSやサーバで同じ結果になるかはわかりません。
OS:Windows 10
VirtualBox Version: 6.1
Vagrant 2.2.14
[root@localhost httpd]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 16 2020 16:18:20
[root@localhost httpd]# mysql --version
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
[root@localhost httpd]# php -v
PHP 7.3.25 (cli) (built: Nov 24 2020 11:10:55) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.25, Copyright (c) 1998-2018 Zend Technologies
・・・環境がちょっと古いですが、本番環境に合わせないといけないので致し方なし。。。