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.

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

您可以随时删除 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

进行了测试

步骤:

  1. cd 到您的 <project_root>/public 目录和 运行 rmdir storage - 它会删除 link
  2. 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再次存储