Laravel 5.4 app。 CACHE_DRIVER
的{{1}}设置为file
,QUEUE_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的缓存文件。
答案 0 :(得分:13)
使用sudo:c
确保写入缓存的所有进程使用相同的用户(而不仅仅属于同一个组),因为事实证明Laravel写的缓存文件具有0755行的权限,这限制了对所有者的写入。 / p>
如果像我一样,你为每一个使用不同的用户:
您最终会得到属于不同用户的文件,即使他们属于所需的群组也不能被其他用户写入或删除(以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()