Laravel のStorage を使っていて、シンボリックリンクが切れてファイルの読み込みができなくなる時があります。
その時の復旧方法を備忘録的に残します。
シンボリックリンクの設定
php artisan storage:link
これでシンボリックリンクの設定ができます。
Storage フォルダがroot直下にでき、/public 直下からリンクが張られます。
それでうまくいっていたはずが、色々やるうちに変わったり外れてしまった場合の対処法です。
シンボリックリンクの確認
ローカルの場合、仮想環境のサーバにログインします。
プロジェクトのフォルダまで移動し、ls -la でシンボリックリンクを確認します。
vagrant@homestead:~/code/project$ cd public
vagrant@homestead:~/code/project/public$ ls -la
total 24
drwxr-xr-x 1 vagrant vagrant 384 Jul 4 02:52 .
drwxr-xr-x 1 vagrant vagrant 960 Jun 28 07:37 ..
drwxr-xr-x 1 vagrant vagrant 96 Jun 16 11:26 css
-rw-r--r-- 1 vagrant vagrant 6148 May 15 06:23 .DS_Store
-rw-r--r-- 1 vagrant vagrant 0 Apr 10 07:56 favicon.ico
-rw-r--r-- 1 vagrant vagrant 603 Apr 10 07:56 .htaccess
-rw-r--r-- 1 vagrant vagrant 1823 Apr 10 07:56 index.php
drwxr-xr-x 1 vagrant vagrant 96 Jun 16 11:26 js
-rw-r--r-- 1 vagrant vagrant 71 Jun 28 07:38 mix-manifest.json
-rw-r--r-- 1 vagrant vagrant 24 Apr 10 07:56 robots.txt
lrwxr-xr-x 1 vagrant vagrant 45 Jul 4 02:52 storage -> /User/hogehoge/code/project/storage/app/public/
drwxr-xr-x 1 vagrant vagrant 128 May 15 08:02 voice
仮想環境なのに /User/hogehoge/code/project/storage/app/public/ みたいなパスになっていたら間違いです。
シンボリックリンクを削除する
リンクが間違っていたら、unlink でリンクを削除します。
vagrant@homestead:~/code/project/public$ unlink storage
正しいパスでシンボリックリンクを設定する
シンボリックリンクの設定は ln -s [正しいパス] [storage] です。
正しいパスは、$pwd でプロジェクトrootのパスを確認し、/project/storage/app/public/ を設定。
vagrant@homestead:~/code/project/public$ ln -s /home/vagrant/code/project/storage/app/public/ storage
ついでに: 本番環境でシンボリックリンクが繋がらないとき
単純に繋がっていないだけのことが多いので、サーバにログインして、storage:link しましょう。
php artisan storage:link
参考