Laravel 5.4 - php artisan cache:使用'file'缓存驱动程序时clear不清除缓存文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.4 - php artisan cache:使用'file'缓存驱动程序时clear不清除缓存文件相关的知识,希望对你有一定的参考价值。

Laravel 5.4 app。 CACHE_DRIVER设置为fileQUEUE_DRIVER设置为sync中的.env

当我运行php artisan cache:clear它说Cache cleared successfully但我仍然有我的storage/framework/cache目录中的236K文件。

对此感到沮丧,我还使用该目录中的storage/framework/cache手动删除了rm -rf *下的所有文件/目录。

现在,当我运行art queue:restart时,我得到了[ErrorException] file_put_contents(/var/www/vhosts/my-app.com/releases/28/storage/framework/cache/ee/2f/ee2f842aa7bb1f53ed
f3a2ed2c09a1807ffa6c90): failed to open stream: No such file or directory

所以,我手上有两个问题。首先是:为什么Artisan没有删除所有缓存文件?我如何安全地删除它们?第二个问题是:我如何从中恢复,以便php artisan queue:restart不会对我产生错误?

更新:我发现如果QUEUE_DRIVER设置为sync,我可能没有理由重新启动队列工作程序,所以跳过该命令完全解决了我的问题的一半。仍不确定如何正确删除这些236K的缓存文件。

答案

简短的回答

使用sudo:sudo rm -r ./storage/framework/cache

答案很长

确保写入缓存的所有进程使用相同的用户(而不仅仅属于同一个组),因为事实证明Laravel使用0755行的权限写入缓存文件,这限制了对所有者的写入。

如果像我一样,你会为每个用户使用不同的用户:

  • PHP进程
  • 工匠CLI
  • 工匠通过主管(工作)

您最终会得到属于不同用户的文件,即使它们属于所需的组,也不能被其他用户写入或删除(以www-data为例)。

希望有人能找到一种方法将Laravel中的新缓存文件权限设置为类似0775的东西。如果它只是从父级继承的话会很好。

边注

这对我来说也导致管理程序进程和PHP进程之间的Cache::remember()问题,因此我得到put_file_contents错误,因为不同的用户无法写入缓存的文件。

原始答案

我遇到了同样的问题,在我的情况下,文件没有被删除,因为它们被写保护。当我使用rm -r ./storage/framework/cache手动删除它时,我得到了警告rm: descend into write-protected directory 'cache/c5'?。我不会为缓存中的每个文件键入yes,所以我运行了与sudo相同的命令,它没有顺利工作sudo rm -r ./storage/framework/cache

这回答了你的问题,为什么他们没有被Artisan cache:clear删除和运行rm是一个容易的解决方法;虽然它没有解决为什么文件被写为写保护的问题。

删除缓存后,Laravel再次创建缓存为写保护。这意味着它可能是一个错误,需要有人向Laravel开发人员提交错误报告。由于解决方案是微不足道的,我会把它留给其他人去做。

另一答案

你可以试试:

php artisan config:cache

它解决了我的大部分问题。

以上是关于Laravel 5.4 - php artisan cache:使用'file'缓存驱动程序时clear不清除缓存文件的主要内容,如果未能解决你的问题,请参考以下文章

脚本 php artisan 优化处理使用 laravel 5.4 返回的 post-update-cmd 事件,错误代码为 1

Laravel 5.4 - php artisan cache:使用'file'缓存驱动程序时clear不清除缓存文件

拉拉维尔 5.4。调用错误:php artisan db:seed

laravel artisan 命令列表

Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)

Laravel 5.4 artisan 为 /public 的现有文件夹提供 htaccess / 和 Routes::get