1. はじめに
Laravel で sail を使って開発をしている際にハマったエラーについて、解決策をまとめます。
Laravel は、 PHP のフレームワークで、sail とは、Laravel での開発を簡単にスタートできるように準備された公式の Docker 環境です。sail を使用して複数のプロダクトを開発している方のお役に立てれば幸いです。
目次
1.はじめに
2.使用環境
3.エラー発生状況
4.試したこと
5.結論
2. 使用環境
- MacBook Air : M2チップ / 16 GB
- PHP : 8.2.14
- Laravel Framework : 10.39.0
- My SQL : 8.0.32
- PHP My Admin : 5.2.1
- Docker :
Client:
Cloud integration: v1.0.35+desktop.5
Version: 24.0.7
API version: 1.43
Go version: go1.20.10
Git commit: afdd53b
Built: Thu Oct 26 09:04:20 2023
OS/Arch: darwin/arm64
Context: desktop-linux
Server: Docker Desktop 4.26.0 (130397)
Engine:
Version: 24.0.7
API version: 1.43 (minimum version 1.12)
Go version: go1.20.10
Git commit: 311b9ff
Built: Thu Oct 26 09:08:15 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.25
GitCommit: d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f
runc:
Version: 1.1.10
GitCommit: v1.1.10-0-g18a0cb0
docker-init:
Version: 0.19.0
GitCommit: de40ad0
3. エラー発生状況
Laravel の学習をしていて、sail を使用しプロジェクトを2つ作成しました。2つのプロジェクトを切り替えて作業しようとしたところ、My SQL のエラーが発生するとともに、PHP My Admin で表示される内容がおかしいことに気づきました。
タイミング
sail down
でプロジェクト A の sail を停止し、プロジェクト B のディレクトリに移動。sail up -d
でプロジェクト B
の sail を起動し、localhost
にブラウザで接続した時。
エラーメッセージ
データベースにアクセスできないようです。
lluminate \ Database \ QueryExceptionPHP 8.2.1410.38.2
SQLSTATE[HY000] [1044] Access denied for user 'sail'@'%' to database 'example_app'
SELECT count(*) AS aggregate FROM `articles`
PHP My Admin の挙動
プロジェクト B で sail を起動しているにも関わらず、locahost:8080
に接続して PHP My Admin にログインすると、プロジェクト A のデータベースが表示される。
プロジェクト A の sail はもう停止しているのに、どうして A のデータベースに接続するんだろう?と、はてなでいっぱいでした。
4. 試したこと
-
プロジェクト B の sail を一度停止して、起動し直す。
→改善せず。 -
プロジェクト B の sail を停止し、プロジェクト A の sail を起動。改めて sail を停止する。
→改善せず。 -
.env ファイルの DB 環境変数の確認
→正しく設定されている。 -
ボリュームの削除
sail down -v
参考資料 : Laracasts
-v オプションをつけたことで、 volume も削除されたことが分かります。
この後改めてsail up -d
で sail を起動したところ、ようやくプロジェクト B のデータベースにアクセスすることができ、localhost
もエラーなく表示されました。
5. 結論
Laravel sail で My SQL 周りの挙動がおかしい時には、ボリュームの削除で解決することがあると分かりました。ただ、ボリュームを削除するということは、データベースの中のデータが消えてしまうということなので、ご注意ください。特に問題ない場合は、ボリュームを削除した上で、また sail artisan migrate
でテーブルを作成した上で、ダミーデータの挿入を行ってください。