2020 年 1 月更新
似乎有一个简单的解决方案可以解决所有这些问题。使用这个答案https://serverfault.com/a/96349 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 rm -r ./storage/framework/cache
长答案
确保写入缓存的所有进程都使用相同的用户(而不仅仅是属于同一组),因为事实证明 Laravel 使用类似于 0755 的权限写入缓存文件,该权限限制对所有者的写入。
如果像我一样,您为每个用户使用不同的用户:
您最终会得到属于不同用户的文件,并且其他用户无法写入或删除,即使它们属于所需的组(例如 www-data)。
希望有人能找到一种方法在 Laravel 中将新的缓存文件权限设置为 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 开发人员提交错误报告。由于解决方法很简单,我将把它留给其他人来做。