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

时间:2017-08-07 21:12:40

标签: php caching laravel-5 queue artisan

Laravel 5.4 app。 CACHE_DRIVER的{​​{1}}设置为fileQUEUE_DRIVER的{​​{1}}设置为sync

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

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

现在,当我运行rm -rf *时,我得到art queue:restart

所以,我手上有两个问题。首先是:为什么Artisan没有删除所有缓存文件?我如何安全地删除它们?第二个问题是:如何从中恢复,以便[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
不会对我造成错误?

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

4 个答案:

答案 0 :(得分:13)

简短回答

使用sudo:c

答案很长

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

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

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

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

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

旁注

对我而言,这也导致了主管流程与管理员流程之间sudo rm -r ./storage/framework/cache的问题。 PHP进程导致Cache::remember()错误,因为缓存的文件无法被不同的用户写入。

原始答案

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

这回答了你的问题,即为什么他们不会被Artisan sudo rm -r ./storage/framework/cache&运行cache:clear是一个很容易解决的问题;虽然它没有解决为什么文件被写为写保护的问题。

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

答案 1 :(得分:5)

您可以尝试:

php artisan config:cache

它解决了我的大多数问题。

答案 2 :(得分:1)

我最近遇到了类似的问题。即使在运行Cache之后,通过php artisan cache:clear门面创建的缓存文件似乎仍然存在,并且正如@Precastic提到的那样,事实证明这是文件权限问题。

我不是像手动删除文件/文件夹那样,而是使用具有管理员权限的相同命令运行了

sudo php artisan cache:clear

它为我工作。希望这对某人有帮助。

答案 3 :(得分:0)

您还可以使用Tinker:

php artisan tinker
Cache::store("file")->flush()