docker環境でローカルホストを開いたときにthe stream or file /var/www/html/storage/logs/laravel.log
(以下略)というエラーが表示された
エラーの意味
大まかな意味としてはlaravel上でログファイルへの書き込みが失敗していますよ〜という意味らしい。
考えられる原因
・パーミッションの問題:ログファイルのパーミッションが正しく設定されていない。Webサーバーのユーザー(例えば、ApacheやNginxなど)が書き込み権限を持つ必要がある
・ログファイルが存在しない:そもそもログファイルが存在していない場合。
上記の2点が原因として考えられると思いますが今回はエラーメッセージにpermission denied
と表示されていたのでパーミッションの問題かと考えられます。ログファイルも(storage/logs)にしっかりと存在していました。
対処法
1.ターミナル(プロジェクト直下)でsudo chmod o+w ./storage/ -R
を入力
2.続けてsudo chown www-data:www-data -R ./storage
を入力
結果
ローカルホストが無事表示されました!他の方の記事で同じようなものがあるのですがそちらでは解決しなかったため執筆しました!今回のコードの簡単な解説を下に記載しておきますのでコードの意味など興味あればご覧ください
簡単に解説
sudo chmod o+w ./storage/ -R
を分解説明
sudo :ご存知の通りLinuxなどで特権(root権限)を持ったユーザーとしてコマンドを実行する。superuser doの略
chmod :ファイルやディレクトリの権限を変更するコマンド。change modeの略
o+w : 「o」は「others」(他のユーザー)のことで、「+w」は書き込み権限を付与するオプション。つまり、このコマンドは「./storage/」ディレクトリ以下のすべてのファイルとディレクトリに対して、他のユーザーに書き込み権限を付与する操作を行います。(「./」は現在のディレクトリから見た相対パスでlogsはstorage配下にあるためこの記載です)
-R : 「-R」は、再帰的(recursive)という意味です。
www-data : ここで指定している「www-data」は、所有者とグループを表します。具体的には、所有者を「www-data」ユーザー、グループを「www-data」グループに変更することを意味します。