【问题标题】:Laravel - How to revert local storage symlink and refreshLaravel - 如何恢复本地存储符号链接并刷新
【发布时间】:2018-07-08 16:54:51
【问题描述】:

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

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

【问题讨论】:

标签: laravel storage symlink


【解决方案1】:

简单方法

转到公共文件夹只需删除/删除公共文件夹中的存储链接/

然后运行命令

    php artisan storage:link

上面的命令会再次链接存储

【讨论】:

    【解决方案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

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

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

    【讨论】:

      【解决方案3】:

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

      步骤:

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

      链接现在应该可以刷新并且可以正常查看了。

      【讨论】:

        【解决方案4】:

        您可以随时删除链接:

        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
        

        【讨论】:

          【解决方案5】:

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

          php artisan storage:link
          

          这个想法是在部署之间保持持久存储。

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

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

          【讨论】:

          • 我认为这在 Laravel 5.1 中不可用
          • 不回答问题
          猜你喜欢
          • 2019-01-11
          • 1970-01-01
          • 2018-06-20
          • 1970-01-01
          • 1970-01-01
          • 2017-12-29
          • 1970-01-01
          • 2019-05-20
          • 2021-05-17
          相关资源
          最近更新 更多