Laravel-如何还原本地存储符号链接并刷新



当我将图像保存到存储时,它们显示在存储/应用程序目录中,但它们不会显示在公共/存储中。我还注意到似乎已经创建了一个存储/应用程序/公共目录,其中还包含存储/应用程序中的所有内容。

我无法弄清楚我是如何造成这种混乱的,我认为将这些目录恢复到开始时的样子(使用一个新的 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上对此进行了测试

。步骤:

  1. CD 到您的<project_root>/public目录并运行rmdir storage- 它将删除链接
  2. CD 返回到项目根目录并运行php artisan storage:link以再次链接

链接现在应该可以刷新并查看,而不会出现问题。

php artisan storage:link --force

最新更新