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

时间:2018-01-29 21:59:43

标签: laravel storage symlink

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

我无法弄清楚我是如何设法造成这种混乱的,我认为将这些目录恢复到应该如何开始(使用新的laravel项目)可能是有意义的,删除任何现有的符号链接,然后重新开始 - 这听起来像是最好的方法吗?如果我错误地设置了符号链接,我将如何进行此操作?

4 个答案:

答案 0 :(得分:7)

您随时可以删除链接:

cd public
rm storage

如果您需要链接不同的位置,请在不使用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

答案 1 :(得分:3)

实际上应该是这样的! Laravel有一个命令将公共目录符号链接到存储目录:

php artisan storage:link

我们的想法是在部署之间保持持久存储。

  

此约定将您的可公开访问的文件保存在一个文件中   使用零时可以在部署中轻松共享的目录   像Envoyer这样的停机部署系统。

https://laravel.com/docs/5.5/filesystem

答案 2 :(得分:2)

对于Windows用户,我已经使用Windows 10和Laravel 7对此进行了测试

步骤:

  1. cd到您的<project_root>/public目录并运行rmdir storage-它会删除链接
  2. cd返回项目根目录并运行php artisan storage:link重新链接

链接现在应该可以刷新并且可见了。

答案 3 :(得分:2)

我遇到了这个问题,我通过将其添加到我的部署脚本中来修复它:

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 脚本来处理 ./public/storage 存在 (1) 和不存在 (2) 两种情况。

您可能会忽略我提到的手动删除 storage 符号链接引用,但请不要忘记,如果您的部署脚本执行此操作然后由于其他原因失败,符号链接将 be gone。< /p>

有人应该发布一个使用 bash 脚本的答案,以确保可以处理这两种情况。我没有这方面的技能。

<块引用>

注意: php artisan storage:link 仅在您位于项目的根目录中时有效。这就是为什么我上面的脚本以 cd public 开头并且它以 cd .. 开头。如果您当时不在 root 中,php artisan 命令将失败。