当我将图像保存到存储时,它们显示在存储/应用程序目录中,但它们不会显示在公共/存储中。我还注意到似乎已经创建了一个存储/应用程序/公共目录,其中还包含存储/应用程序中的所有内容。
我无法弄清楚我是如何造成这种混乱的,我认为将这些目录恢复到开始时的样子(使用一个新的 laravel 项目)、删除任何现有的符号链接并重新开始可能是有意义的 - 这听起来像是最好的方法吗?如果我错误地设置了符号链接,我将如何执行此操作?
您可以随时删除链接:
cd public
rm storage
如果您需要链接不同的位置,请在不使用storage:link
命令的情况下创建一个新位置:
File::link(storage_path('dir1'), public_path('dir2'));
或者手动创建符号链接:
ln -s /full/path/to/storage/dir1 /full/path/to/public/dir2
我遇到了这个问题,我通过将其添加到我的部署脚本中来修复它:
cd public
rm storage
cd ..
php artisan storage:link
在执行此操作之前,可以通过 SSH 连接到部署服务器并导航到/public
文件夹。您可能会在其中看到一个storage
文件夹,并且您应该注意到它是一个符号链接。您应该将其保留在那里,并将我的上述命令添加到您的部署脚本中。
如果手动删除存储链接,则需要在首次部署时跳过这些链接:
cd public
rm storage
cd ..
然后,之后的每个部署,您都可以执行以下操作:
cd public
rm storage
cd ..
php artisan storage:link
如果不这样做,部署可能会失败,因为如果rm storage
引发错误,则生成将失败。密切注意我在说什么。在执行 CLI 命令时,您必须非常具体,除非您可以添加一些 bash 脚本来处理存在 (1) 和不存在 (2)./public/storage
的 2 种情况。
您可能会忽略我提到的手动删除storage
符号链接引用,但不要忘记,如果您的部署脚本执行此操作,然后由于其他原因失败,符号链接将be gone
。
有人应该发布一个使用 bash 脚本的答案,以确保这两种情况都可以处理。我没有这方面的技能。
注意:
php artisan storage:link
仅在项目根目录中时才有效。这就是为什么我上面的脚本以cd public
开头以及为什么它cd ..
.如果当时不在根目录中,则php artisan
命令将失败。
实际上应该是这样!Laravel有一个命令可以将您的公共目录符号链接到存储目录:
php artisan storage:link
这个想法是在部署之间保持持久存储。
此约定将使您的可公开访问的文件保留在一个文件中 使用零时可在部署之间轻松共享的目录 像Envoyer这样的停机时间部署系统。
https://laravel.com/docs/5.5/filesystem
简单方法
转到公共文件夹 只需删除/删除公共中的存储链接/
然后运行命令
php artisan storage:link
上面的命令将再次链接存储
对于Windows用户,我已经在Windows 10和Laravel 7上对此进行了测试
。步骤:
- CD 到您的
<project_root>/public
目录并运行rmdir storage
- 它将删除链接 - CD 返回到项目根目录并运行
php artisan storage:link
以再次链接
链接现在应该可以刷新并查看,而不会出现问题。
php artisan storage:link --force