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

fro*_*zee 13 php queue caching laravel-5 artisan

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的缓存文件.

Pre*_*tic 13

简短的回答

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

答案很长

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

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

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

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

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

边注

这对我来说也导致了Cache::remember()管理程序进程和PHP进程之间的问题,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开发人员提交错误报告.由于解决方案是微不足道的,我会把它留给其他人去做.


小智 7

你可以试试:

php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

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