Laravelでstorageの画像が表示されない件
どうもこんにちは。
今回は、Laravelで特に何もしていないのに画像が表示されなくなった事例がありましたので、その備忘録です。
この「特に何もしていないのに」ってすごいパワーワードだと思ってます。大概は絶対何かしてますからね(笑)
Laravelアプリをサーバー移動した際に発生
そもそもどう言う時に起きたかというと、今までKUSANAGI8のサーバーで作っていたアプリをKUSANAGI9に移動した際に発生しました。
ちなみに最初は移動当初は問題なく画像が表示されていた為、気づいていませんでした。
新しい画像を追加した際に判明
移動当初の画像類は特に問題なく、例えば商品を登録などで新しく画像を追加した際に画像が表示されないというものです。
ちなみに、画像のURLは移動当初の画像URLとなんら変わりなく、storageフォルダにもちゃんと画像が登録されています。そりゃそこらへんの仕組み変えてないんだからそうですよね^^;
色々試してみるも成果なし
キャッシュかとも思ったのですが、試しにプライベートモードなどで見ても特に問題なし。
そもそも、他の画像が問題なく表示されてると言うことはリンク関連が問題ではない?
さらにはローカル環境では全く問題なくて、問題があるのはステージングと本番のみ。やっぱりサーバー移動した際に何かしらの弊害が起きていることは間違いないはず。
少しログを細かく出しても動作に全く問題ありませんでした。
そりゃ表示されてるんだからそうだよね^^;
原因はstorageフォルダのリンクだった!
結論から言うと、storageフォルダの再リンクすることで解決しました。
今までこう言う事例がなかったので正直盲点でした。いらん時間を食いました;w;
よくよくみると、storageフォルダにはちゃんと画像が保存されていますが、publicフォルダのstorageフォルダにはファイルが連動されておりません。
シンボリックリンクを作り直してみる
まぁされてないなら作り直すかと思い、とりあえず実行。
root@07b77be4cb94:/var/www/html# php artisan storage:link
The [/var/www/html/public/storage] link already exists.
The links have been created.
ん?エラーが出る。既に作成済みの場合はダメなようです。そりゃそうか。
一旦削除してから再作成
既に作成されているpublicフォルダのstorageフォルダを削除します。
root@8c43168102a2:/var/www/html# rm -rf public/storage
その後改めて、シンボリックリンクを再作成します。
root@8c43168102a2:/var/www/html# php artisan storage:link
The [/var/www/html/public/storage] link has been connected to [/var/www/html/storage/app/public].
The links have been created.
無事作成できました。
試しに再度画像登録などを行ってみましたが、問題なくpublicフォルダのstorageとも連動しているようで、画像もちゃんと表示されました!
まとめ
言われてみれば当然な事なのかも知れませんが、全く選択肢に入れてなかったので無駄に時間を食ってしまいました。
常日頃選択肢を広く持っておかないと書けなくていいところで時間がかかってしまいますね^^;
そんなこんなで
シンボリックリンクを使っている人はとりあえず作り直しとけ。
って事で、備忘録でした^^