19
8

シンボリックリンクに悩まされた

Last updated at Posted at 2024-05-06

Laravelで画像を表示させるところで詰まったのでシンボリックリンクの学習も兼ねて忘備録

シンボリックリンクにハマる人は多いみたいでたくさんの方が記事をあげてくれていて、本当にありがたい。
その足しにでもなれば。

Laravelでは画像を表示させる際に必要なシンボリックリンクというものがある。
【Laravel】画像を保存して表示する方法

【Laravel】"storage/app/public"に配置した画像へアクセスしてみる


シンボリックリンクとは

オペレーティングシステム(OS)のファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。
シンボリックリンク 【symbolic link】

シンボリックリンク.jpg
本体まで行かなくても必要なものを中継を使って呼び出せる
  →「ショートカット」と呼ばれる

PCのデスクトップに貼ってあるアイコンも同じ

本題

シンボリックリンク作成問題なく出来たにも関わらず、画像の表示が出来なかった。
ブラウザのコンソール確認するも404 (Not Found)

index.blade.php
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

赤だと問題ありという誤認識:frowning2:
これ色つけれないと分かりづらい....

課題

-エラーが出た際の対処の仕方。
-index.blde.phpの2のコードのエラー解決

最後に

最後まで読んでいただきありがとうございます。
間違っている点あればご指摘お願いします。

19
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
8