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

2022-08-30 17:47:04

Laravel 5.4 应用程序。 设置为 和 设置为 中。CACHE_DRIVERfileQUEUE_DRIVERsync.env

当我运行它说,但我的目录中仍然有236K的文件。php artisan cache:clearCache cleared successfullystorage/framework/cache

对此感到沮丧,我还从该目录中手动删除了使用下的所有文件/目录。storage/framework/cacherm -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

更新:我突然想到,如果设置为 ,我可能没有理由重新启动队列工作线程,因此完全跳过该命令可以解决我的一半问题。仍然不确定如何正确删除那些236K的缓存文件。QUEUE_DRIVERsync


答案 1

2020年1月更新

似乎有一个简单的解决方案来解决所有这些问题。使用此答案 https://serverfault.com/a/96349 作为参考,您可以在父文件夹上设置gid位,以便正确组中的任何人都可以写入在其下创建的所有后续文件和文件夹,无论它们是谁创建的;从而克服了组安全权限问题,如下所述。./storage/*

这对我有用:

# Assumes all required users belong to the www-data group
sudo chgrp -R www-data /path/to/storage

sudo chmod g+s /path/to/storage

简短的回答

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

长答案

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

如果像我一样,您为以下每个用户使用不同的用户:

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

您最终会得到属于不同用户的文件,即使其他用户属于所需的组(例如 www-data),其他用户也无法写入或删除这些文件。

希望有人能找到一种方法,将Larvel中的新缓存文件权限设置为0775。如果它只是从父继承,那就太好了。

附注

这对我来说也导致了主管进程和PHP进程之间的问题,以至于我收到错误,因为缓存的文件不能被不同的用户写入。Cache::remember()put_file_contents

原始答案

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

这回答了您的问题,为什么它们没有被Artisan删除,并且运行是一个足够简单的解决方法;尽管它不能解决为什么文件被写入写保护的问题。cache:clearrm

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


答案 2

您可以尝试:

php artisan config:cache

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


推荐