【问题标题】:Laravel showing "Failed to clear cache. Make sure you have the appropriate permissions"Laravel 显示“无法清除缓存。请确保您具有适当的权限”
【发布时间】:2019-02-13 07:42:53
【问题描述】:

Laravel 向我显示“用户 'homestead'@'localhost' 的访问被拒绝(使用密码:YES)”。一种解决方案是清除缓存和存储的配置缓存,所有这些都使用以下三个命令:

php artisan cache:clear
php artisan config:clear
php artisan config:cache

php artisan cache:clear 之后,终端说:

Failed to clear cache. Make sure you have the appropriate permissions.(红色背景)

执行第二个和第三个代码(php artisan config:clearphp artisan config:cache)效果很好!但是在输入第一行时它仍然给我错误。谁能解释为什么?

【问题讨论】:

  • 当我改变顺序时它对我有用(路由:清除,配置:清除,然后缓存:清除)。
  • 如果建议的解决方案都不适合您,请使用 sudo。 ;)
  • sudo -u www-data php artisan cache:clear
  • 老实说,每次都是一个问题……我厌倦了这个问题……我有一整页关于如何解决这个问题的注释,但似乎列表越来越多了越来越长......这次我根本无法修复它......删除所有缓存文件,创建所有文件夹,尝试停止,尝试重新加载配置,尝试在管理员中打开终端,尝试切换我的缓存驱动程序。 ... 都试过了,这一次它只是不会做存储链接,太烦人了

标签: laravel composer-php


【解决方案1】:

就我而言,问题是我在 .env 中有“CACHE_DRIVER=memcached”,但没有安装 memcached。切换到文件驱动程序或安装 memcached 为我解决了这个问题。

【讨论】:

    【解决方案2】:

    我正在 Homestead 运行我的项目。

    我的环境:

    Ubuntu1~20.04+ Laravel 6.20.26

    我的输出

    显示真实的致命信息

    编辑src/Illuminate/Filesystem/Filesystem.php 598:14 原代码:

    if (! $preserve) {
        @rmdir($directory);
    }
    

    调试代码

    if (! $preserve) {
        rmdir($directory);
    }
    

    然后重新执行php artisan cache:clear 输出改变了:

    那我就解决Text file busy

    【讨论】:

      【解决方案3】:

      (对于 MAC 用户)

      有时,这意味着当前用户对 storage/framework/cache/data/ 文件夹没有足够的权限。运行

      1. sudo chmod -R ug+rwx storage/framework/cache/data/

      然后

      1. php artisan cache:clear

      希望有时它对你有用。

      【讨论】:

        【解决方案4】:

        调用以下 4 个命令应该可以解决 laravel 上的大部分权限问题。

        sudo chown -R $USER:www-data storage
        sudo chown -R $USER:www-data bootstrap/cache
        chmod -R 775 storage
        chmod -R 775 bootstrap/cache
        

        基本上,chown -R $USER:www-data 的作用是将当前用户 $USER 设置为所有者,www-data 设置为组,chmod -R 775 将 7 分配给用户,7 分配给组,5 分配给其他用户。

        #PS:您需要从 laravel 项目目录运行上述命令,否则,您需要提供完整路径,例如 /var/www/project_name/storage

        【讨论】:

        • 这种方法的问题是它不断重置为不工作。
        【解决方案5】:

        您应该使用以下步骤更新权限:

        1. 使用命令“whoami”检查用户,然后让输出为“ironman”
        2. 如果缓存目录中存在“data”文件夹,则运行以下命令

        sudo chown -R ironman:ironman storage/framework/cache/data/

        这将解决您的以下问题

        【讨论】:

          【解决方案6】:

          在 Laravel 8 中,我通过先运行 composer dump-autoload 然后使用 php artisan config:cache 解决了我的问题

          【讨论】:

          • 像魅力一样工作!
          • 这似乎是 Laravel 8 与 Homestead 和 Vagrant 的解决方案。我确信它也可以在其他环境中工作,但这对我来说是这两个技巧。其他 cmets 在设置权限时基本上是有效的,但是在执行 ls- l 以查看所有权时,如果一切正常.
          • 完美地为我工作,无需任何权限更改,谢谢!我只是先运行“php artisan config:cache”然后我能够成功运行“php artisan cache:clear”。
          【解决方案7】:

          我猜你有权限/所有权问题。要么正确设置权限,要么手动递归删除缓存文件夹并重新创建:

          sudo rm -Rf storage/framework/cache
          mkdir storage/framework/cache
          

          【讨论】:

            【解决方案8】:

            授予 775 存储目录权限为我解决了这个问题。

            sudo chmod -R 775 storage
            

            【讨论】:

              【解决方案9】:

              删除和添加 ./storage/framework/cache/data 文件夹对我有用。

              【讨论】:

                【解决方案10】:

                遇到同样的错误。尝试在相关文件夹中授予 chmod 777 权限

                【讨论】:

                • 这个已经讨论过了,想法是不给777权限
                【解决方案11】:

                尝试删除引导文件夹下的这些缓存文件:

                /bootstrap/cache/packages.php
                /bootstrap/cache/services.php
                /bootstrap/cache/config.php
                

                然后运行php artisan cache:clear

                【讨论】:

                • 你节省了我的时间。 :)
                • @SumonMahmud 很高兴听到!
                • 感谢您的大量回答后,我得以解决此问题。谢谢
                • @NipunTharuksha 没有问题!
                • 您应该获得 MVP。将我的项目移动到另一个目录,另一个名称,顺便说一句,gitlab 上的另一个组+另一个 repo 名称以这个问题结束。你解决了这个!谢谢!
                【解决方案12】:

                如果这些都不适合你,只需使用 sudo 运行你的 php artisan cache:clear 命令。 例如sudo php artisan cache:clear 稍后谢谢我~!

                【讨论】:

                  【解决方案13】:

                  在我的 vagrant/homestead 虚拟机上遇到了同样的问题。此线程中的所有其他内容均无济于事。

                  解决方案是vagrant reload --provision

                  【讨论】:

                    【解决方案14】:

                    第一次尝试:

                    检查“storage/framework/cache/”中是否有“data”文件夹。 如果没有,则手动创建它。 (创建一个名为“data”的新文件夹)

                    选项 2:

                    如果“storage/framework/cache/”中有“data”文件夹。 删除其中的所有现有文件夹。

                    最后,运行这个:

                    php artisan cache:clear
                    

                    这应该可以解决这个问题:“无法清除缓存。请确保您拥有适当的权限。”

                    【讨论】:

                    • 很高兴听到@KimTormes
                    • 最后这对我有用.. 谢谢,+1 票!
                    • 你是最棒的
                    • 感谢@ChristopherKikoti
                    • 感谢@ahmednawazbutt,如果此解决方案可以帮助您。
                    【解决方案15】:

                    这不能解决吗?

                    $php artisan optimize:clear
                    Compiled views cleared!
                    Application cache cleared!
                    Route cache cleared!
                    Configuration cache cleared!
                    Compiled services and packages files removed!
                    

                    【讨论】:

                      【解决方案16】:

                      我遇到了同样的问题,但注意到如果你运行 php artisan config:clear 它也会在默认情况下运行 cache:clear ,所以当你再次运行它时,其中没有缓存并给出该错误。你只需要运行 php artisan config:clear。我不确定为什么 cache:clear 在单独运行时会失败,但运行 config:clear 是一个不错的选择。

                      这是我用来清除应用程序中所有内容的有用别名。

                      laraclear='php artisan config:cache && php artisan config:clear && php artisan view:clear && php artisan route:clear && php artisan telescope:clear && php artisan debugbar:clear'
                      

                      删除您不使用的任何不需要的命令。

                      【讨论】:

                        【解决方案17】:

                        打电话

                        php artisan config:cache 
                        

                        之前

                        php artisan cache:clear
                        

                        修复了问题。

                        【讨论】:

                        • 哦,原来如此。我移动了项目的目录并运行 cache:clear 试图清除它无权访问的旧路径的缓存(实际上文件夹不存在)。谢谢!
                        • 这是正确的答案。你无法清除你没有的东西。
                        【解决方案18】:

                        我在 docker 容器中运行我的项目,然后尝试通过 laragon 访问它,我遇到了类似的问题,这是由于 /bootstrap/cache/config.php 中的编译配置造成的。

                        我通过运行php artisan config:clear 修复了拟合,这会自动删除/bootstrap/cache/config.php 文件。

                        【讨论】:

                          【解决方案19】:

                          如果 (storage/framework/cache/data) 下不存在data 目录,则会出现此错误。

                          这个data 目录在全新/全新安装中默认不存在。

                          在 (storage/framework/cache) 手动创建 data 目录应该可以解决此问题。

                          【讨论】:

                          • 就在现场!我已经完成了你的回答
                          • 我有 storage/framework/cache/data 并且仍在收到此消息。
                          • @JayBienvenu 它应该在没有数据目录的情况下工作 - 只有 storage/framework/cache 这个路径必须已经存在(至少对于较新的 Laravel 版本 5.7+) - 检查你是否没有覆盖默认存储路径和如果没有,请检查您的缓存文件夹是否对 webserver/php 有足够的权限;假设默认 FileStore 缓存 - 问题可能发生在 vendor/laravel/framework/src/Illuminate/Cache/FileStore.php - 方法 flush() - 您可以从那里开始调试 :)
                          • @JayBienvenu,试试这个stackoverflow.com/a/54442312/2140408
                          • 仍然有这个错误......太烦人了......基本上尝试了我对这个错误的可能解决方案的长长列表中的所有内容......
                          【解决方案20】:

                          只需在storage/framework/cache/ 中添加名为 data 的文件夹并尝试:

                          php artisan cache:clear
                          

                          【讨论】:

                          • 在 /application/storage/framework/cache 中添加了数据文件夹,并且它的工作。谢谢!
                          【解决方案21】:

                          您可能需要使用 composer dump-autoload

                          如果这不起作用,您可以手动删除以下未跟踪的(通常)文件以清除自动加载器和缓存(如果它们被卡住):

                          /bootstrap/cache/packages.php

                          /bootstrap/cache/services.php

                          【讨论】:

                          • 我在另一个主题上看到了这个答案(从 bootstrap/cache 文件夹中删除包和服务文件),但为什么它应该是一个解决方案?另外,删除它们或使用转储自动加载后没有任何变化。
                          • 如果自动加载器被缓存的配置设置卡住,而这些设置不是您想要的,例如数据库连接,您可能会进入一个无法清除的地方。
                          【解决方案22】:

                          也许您需要 chmod 777 -R 存储文件夹。 我认为它也可以 chown www-data:www-data

                          【讨论】:

                          • 我真的不想在我的项目中使用 777。我唯一需要它的时候是通过浏览器访问公用文件夹,但是因为我可以通过使用 localhost:8000 创建一个服务来使用我的项目,所以它让我避免了 777。而且 chown www-data 不起作用
                          • 不在您的所有项目中。只是存储文件夹。并 chown 其 www-data:www-data 而不是 user:www-data。试试吧
                          • 即使在存储文件夹上,也有很多帖子说即使在单个文件夹上也不要使用 777,他们也有充分的理由,出于安全措施... 是的,用户:www-数据是我尝试过的:/
                          • 或者你可以775权限。
                          • sudo chown -R www-data:www-data /path/to/your/project/vendor sudo chown -R www-data:www-data /path/to/your/project/storage
                          猜你喜欢
                          • 2021-01-13
                          • 2019-06-28
                          • 1970-01-01
                          • 2013-07-15
                          • 2018-07-05
                          • 2018-08-05
                          • 2016-03-14
                          • 2014-11-13
                          • 2011-12-24
                          相关资源
                          最近更新 更多