以前作成したLaravelのプロジェクトの修正を行おうとしていつも通りMAMPを起動してブラウザで表示しようとしたら、、、
もういやだ
独学者にはこういうのが一番効きます。
開発環境
$ sw_vers
ProductName: macOS
ProductVersion: 11.6
BuildVersion: 20G165
$ mysql --version
mysql Ver 14.14 Distrib 5.7.35, for osx10.16 (x86_64) using EditLine wrapper
$ php artisan --version
Laravel Framework 6.20.30
解決手順
とりあえず.envのデバッグ設定をオンにして解決手段を模索する。
APP_DEBUG=true
するとこんな感じのエラーがブラウザに表示される
[2002] No such file or directory (SQL: select * from `users` where `id` = 1 limit 1) (View: /Applications/MAMP/htdocs/[Project_name]/resources/views/welcome.blade.php)
意外と単純な理由ってことがわかる。データベースへの接続がうまくいってないみたい。
ひとまずターミナルでMySQLへの接続を試みてみる。
$ mysql -u root -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
まあそりゃ接続できないよね。
んでmysql.sockって何だ?と思ったけどどうやら英語で書いてある通りMac内のプログラムとMySQLを通信の処理をしてくれるいいやつらしい。
この仲介役みたいな人がいないからSQLに接続できないらしい。Macをシャットダウンしたときに解雇されたのか。かわいそうに。
だから以下のようにして新しく仲介役を雇用してやる必要があると。
$ touch /tmp/mysql.sock
備忘録:
touch・・・現在のディレクトリにとりあえず空のファイルを作ってあげるコマンド。
ここで権限のエラーが出ることがある
touch: /tmp/mysql.sock: Permission denied
その場合は
$ ls -l /tmp/mysql.sock
で権限を確認してやり、
$ sudo chown [username]:admin /tmp/mysql.sock
で[username]にパーミッションを与えてあげ、改めてtouchしてやる。
備忘録:
sudo・・・rootユーザーの権限が必要なコマンドを実行できるようになる。
chown・・・指定したファイルの所有権を変更するコマンド。
これで仲介役が雇え、MySQLの接続準備が整ったので、MySQLを再起動する。
$ mysql.server restart
ERROR! MySQL server PID file could not be found!
Starting MySQL
. SUCCESS!
ここのエラーはよくわからないが、MySQLが無事再起動できたようなので改めてブラウザでLaravelを起動してみるとうまくいっていることが確認できた。
初めてこういうふうになった時はめちゃくちゃググりまくって時間がかなりかかってしまったのでそういった方々の役に立てれば、、、!!!
まとめ
Laravelにブラウザで接続できなくなった時はまず.envファイルのdebugをオンにしてどこで接続がうまくいってないか確認する。
mysql.sockでMySQL接続ができないよと言われたら多分mysql.sockが消えてるので、適切な権限のもと新しくmysql.sockを作成してあげる。
mysqlを再起動してうまくいっていることを確認する。
人生がうまくいく。
参考
コマンドラインの操作だったり、それらに付随するエラーだったりってなかなかとっつきにくくて難しいのでまだまだ勉強が必要だなと思った今日この頃。何か気になる点やご指摘等ございましたら教えていただけるとありがたいです。