🧰

[Laravel] 'There is no existing directory ...' の対策

2021/05/02に公開

published_at: 2019-05-28


だいぶハマったので把握したことを記事にします

環境

  • Laravel 5.8
  • PHP 7.3
  • Docker version 18.09.2, build 6247962
  • docker-compose version 1.23.2, build 1110ad01

現象

  • ブラウザでLaravelアプリケーションのURL( http://localhost:8080 など )をリクエストしても期待の画面が表示されない
    • 画面のないAPIリクエストでも想定の結果が返ってこない
  • 以下のような例外メッセージが発生している [1]
    throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and its not buildable: '.$this->errorMessage, $dir));
    
    There is no existing directory at ".../server/storage/logs" and its not buildable: Permission denied
    
  • php artisan cache:clear 実行時に以下
    Failed to clear cache. Make sure you have the appropriate permissions. のメッセージが出力されて失敗する (*)

対策

以下を実行したところ、現象が発生しなくなった

mkdir -p storage/framework/cache/data
chmod -R 777 storage

補足

  • メッセージを見て、ネットで検索して出てくる情報から
    • chmod -R 777 storage
    • chmod -R 777 bootstrap/cache/ をやってみたのだが、現象の解消には至らずだった。

解決の手がかりになった情報

Note

Twitterで相談に乗っていただいた @raki さんに感謝
https://twitter.com/raki/status/1132687857468837888


Footnote

脚注
  1. 例外発生箇所はおそらく https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/StreamHandler.php#L169 (2019/05/28 未明時点) ↩︎

Discussion