Laravel - 如何恢复本地存储符号链接和刷新
Laravel - How to revert local storage symlink and refresh
当我将图像保存到存储器时,它们会显示在 storage/app 目录中,但不会显示在 public/storage。我还注意到 storage/app/public 目录似乎已创建,其中还包含 storage/app.
中的所有内容
我无法弄清楚我是如何造成这种混乱的,我认为将这些目录恢复到开始时的状态可能是有意义的(使用新的 laravel 项目) ,删除任何现有的符号链接,然后重新开始——这听起来像是最好的方法吗?如果我错误地设置了符号链接,我该怎么做呢?
事实本该如此! Laravel 有一个命令将您的 public 目录符号链接到存储目录:
php artisan storage:link
想法是在部署之间保持持久存储。
This convention will keep your publicly accessible files in one
directory that can be easily shared across deployments when using zero
down-time deployment systems like Envoyer.
您可以随时删除 link:
cd public
rm storage
如果您需要 link 个不同的位置,则不使用 storage:link
命令创建一个新的:
\File::link(storage_path('dir1'), public_path('dir2'));
或create a symlink manually:
ln -s /full/path/to/storage/dir1 /full/path/to/public/dir2
对于 windows 用户,我已经用 Windows 10 和 Laravel 7
进行了测试
步骤:
- cd 到您的
<project_root>/public
目录和 运行 rmdir storage
- 它会删除 link
- cd 回到项目根目录并运行
php artisan storage:link
再次link
link现在应该可以正常刷新和查看了。
我遇到了这个问题,我通过将其添加到我的部署脚本中解决了这个问题:
cd public
rm storage
cd ..
php artisan storage:link
在执行此操作之前,您可以通过 SSH 连接到部署服务器并导航到 /public
文件夹。您可能会在那里看到一个 storage
文件夹,您应该注意到它是一个 symlink。你应该把它留在那里并将我上面的命令添加到你的部署脚本中。
如果您手动删除存储 link,您需要在第一次部署时跳过这些:
cd public
rm storage
cd ..
然后每次部署之后,你可以做:
cd public
rm storage
cd ..
php artisan storage:link
如果不这样做,您的部署可能会失败,因为如果 rm storage
抛出错误,构建就会失败。密切注意我在说什么。在执行 CLI 命令时,您必须非常具体,除非您可以添加一些 bash 脚本来处理 ./public/storage
存在 (1) 和不存在 (2) 的两种情况。
你可能会掩饰我提到的手动删除 storage
symlink 引用,但不要忘记,如果你的部署脚本执行了它然后由于其他原因而失败,那么 symlink 将 be gone
.
有人应该 post 使用 bash 脚本的答案以确保可以处理这两种情况。我没有那个技能。
NOTE: php artisan storage:link
only works while you are in the root directory of your project. That's why my above script starts with cd public
and why it does cd ..
. If you aren't in the root at the time, the php artisan
command will fail.
简单方法
转到 public 文件夹只是 delete/remove link 里面的存储 public/
然后运行命令
php artisan storage:link
以上命令会link再次存储
当我将图像保存到存储器时,它们会显示在 storage/app 目录中,但不会显示在 public/storage。我还注意到 storage/app/public 目录似乎已创建,其中还包含 storage/app.
中的所有内容我无法弄清楚我是如何造成这种混乱的,我认为将这些目录恢复到开始时的状态可能是有意义的(使用新的 laravel 项目) ,删除任何现有的符号链接,然后重新开始——这听起来像是最好的方法吗?如果我错误地设置了符号链接,我该怎么做呢?
事实本该如此! Laravel 有一个命令将您的 public 目录符号链接到存储目录:
php artisan storage:link
想法是在部署之间保持持久存储。
This convention will keep your publicly accessible files in one directory that can be easily shared across deployments when using zero down-time deployment systems like Envoyer.
您可以随时删除 link:
cd public
rm storage
如果您需要 link 个不同的位置,则不使用 storage:link
命令创建一个新的:
\File::link(storage_path('dir1'), public_path('dir2'));
或create a symlink manually:
ln -s /full/path/to/storage/dir1 /full/path/to/public/dir2
对于 windows 用户,我已经用 Windows 10 和 Laravel 7
进行了测试步骤:
- cd 到您的
<project_root>/public
目录和 运行rmdir storage
- 它会删除 link - cd 回到项目根目录并运行
php artisan storage:link
再次link
link现在应该可以正常刷新和查看了。
我遇到了这个问题,我通过将其添加到我的部署脚本中解决了这个问题:
cd public
rm storage
cd ..
php artisan storage:link
在执行此操作之前,您可以通过 SSH 连接到部署服务器并导航到 /public
文件夹。您可能会在那里看到一个 storage
文件夹,您应该注意到它是一个 symlink。你应该把它留在那里并将我上面的命令添加到你的部署脚本中。
如果您手动删除存储 link,您需要在第一次部署时跳过这些:
cd public
rm storage
cd ..
然后每次部署之后,你可以做:
cd public
rm storage
cd ..
php artisan storage:link
如果不这样做,您的部署可能会失败,因为如果 rm storage
抛出错误,构建就会失败。密切注意我在说什么。在执行 CLI 命令时,您必须非常具体,除非您可以添加一些 bash 脚本来处理 ./public/storage
存在 (1) 和不存在 (2) 的两种情况。
你可能会掩饰我提到的手动删除 storage
symlink 引用,但不要忘记,如果你的部署脚本执行了它然后由于其他原因而失败,那么 symlink 将 be gone
.
有人应该 post 使用 bash 脚本的答案以确保可以处理这两种情况。我没有那个技能。
NOTE:
php artisan storage:link
only works while you are in the root directory of your project. That's why my above script starts withcd public
and why it doescd ..
. If you aren't in the root at the time, thephp artisan
command will fail.
简单方法
转到 public 文件夹只是 delete/remove link 里面的存储 public/
然后运行命令
php artisan storage:link
以上命令会link再次存储