3

这是问题所在。

缓存存储在app/cache文件夹中。我目前在开发环境下工作,我的缓存存储在app/cache/dev文件夹中。当我使用 symfony 控制台命令清除缓存时出现问题:

php 应用程序/控制台缓存:清除

当我尝试加载我的项目localhost/symfony/dev_app.php 时,我收到一个错误:

RuntimeException: 无法写入缓存文件

我已经安装了setfacl扩展,因为 Debian 不支持 chmod a+,这就是我所做的:

首先,我检查了执行 http 请求时使用了哪个用户:

ps aux | grep http

ahmed     7219  0.0  0.0   7552   884 pts/0    S+   19:51   0:00 grep http

然后我通过执行清除了 app/cache 文件夹

rm -rf app/cache/*

下一步是:

setfacl -R -m d:u:ahmed:rwx,ahmed:rwx app/cache

据我了解,此命令设置用户 ahmed 对 app/cache 文件夹及其当前和新子文件夹和文件的默认权限。

在我的控制台中,我在ahmed用户下工作。

在所有这些步骤之后,我加载了localhost/symfony/dev_app.php并创建了缓存。然后

php app/console cache:clear

再次 **ocalhost/symfony/dev_app.php* 创建新的缓存。但我仍然收到此错误

RuntimeException:无法写入缓存文件“/var/www/local/symfony/app/cache/dev/classes.php”。

那么我做错了什么?

这是app/cache/dev的 getfacl 列表

ahmed@ahmed:/var/www/local/symfony$ getfacl app/cache/dev
# file: app/cache/dev
# owner: root
# group: ahmed
# flags: -s-
user::rwx
user:ahmed:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:ahmed:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
4

1 回答 1

5

Web 服务器组(可能www-data)需要能够写入缓存,您的用户也是如此。您的用户 (ahmed) 应该是 www-data 组的成员(请注意,您必须重新登录才能使组成员身份生效)。在 app/cache 和 app/logs 上设置setgid位 ( +s) 将确保您的用户在其中创建的文件和目录将保持组所有权www-data。取消注释其中的umask(0002)行,app_dev.php以便创建的文件www-data将保持组所有权,确保您的用户具有 0002 的 umask(umask在提示符下键入以查看或umask 0002设置,并在登录时谷歌寻求帮助)并确保您的权限看起来就像是:

    drwxrwsr-x 13 user www-data 4096 2013-05-10 11:05 dev

ahmed.www-data当您的用户 ahmed 在with拥有的目录中创建文件/目录时+s,您应该会发现它们也归ahmed.www-data.

于 2013-05-16T15:55:18.517 回答