Laravelで画像を表示させるところで詰まったのでシンボリックリンクの学習も兼ねて忘備録
と
シンボリックリンクにハマる人は多いみたいでたくさんの方が記事をあげてくれていて、本当にありがたい。
その足しにでもなれば。
Laravelでは画像を表示させる際に必要なシンボリックリンクというものがある。
【Laravel】画像を保存して表示する方法
【Laravel】"storage/app/public"に配置した画像へアクセスしてみる
シンボリックリンクとは
オペレーティングシステム(OS)のファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。
シンボリックリンク 【symbolic link】
本体まで行かなくても必要なものを中継を使って呼び出せる
→「ショートカット」と呼ばれる
PCのデスクトップに貼ってあるアイコンも同じ
本題
シンボリックリンク作成問題なく出来たにも関わらず、画像の表示が出来なかった。
ブラウザのコンソール確認するも404 (Not Found)
1.storage/app/public/imagesに格納した画像
<img src="{{ asset('storage/images/cat.png') }}" />
2.public/imagesに格納した画像
<img src="{{ asset('images/cat.png') }}" />
試してみたこと
-シンボリックリンクやり直し
unlink storage
php artisan storage:link
-記事を参考に行う
記事の手順確認後、storageパスが赤色で表示されていたので
php artisan storage:link
行った
シンボリックリンクをしたけど、画像が表示されなくて詰まったところ
-権限
プロジェクトファイル名/public/storage$ ls -l
drwx----- 2
となっていたので
chmod 755 images
上記コマンドで権限付与
(imagesの部分は画像保存先ファイル名)
-Docker関連
Dockerコンテナを使用している時は/var/www/htmlがルートディレクトリになる。
コンテナ内に入って今の状態を確認してみると、
storage -> /home/missy/TEST/personal/storage/app/public
これを /var/www/html に変更。
rm storage
ln -nfs /var/www/html/storage/app/public storage
ls -ls
storage -> /var/www/html/storage/app/public
解決
いろいろ試してみたが自分では解決に至らず、先輩エンジニアに相談し下記手順で画像表示ができたとのことで自分でも試した結果解決
sail up -d
sail artisan storage:link
sail down
sail up -d
画面確認をしたところきちんと表示できていた。
何故か2は404 (Not Found)
原因
恐らく、
storage -> /var/www/html/storage/app/public
赤で表示されている上記の状態で
php artisan storage:link
を行うと
青色に変わり、storage先も変わってしまった。
storage -> /home/missy/TEST/personal/storage/app/public
赤だと問題ありという誤認識
これ色つけれないと分かりづらい....
課題
-エラーが出た際の対処の仕方。
-index.blde.phpの2のコードのエラー解決
最後に
最後まで読んでいただきありがとうございます。
間違っている点あればご指摘お願いします。