清除缓存时无法写入缓存文件“/var/www/myapp/app/cache/dev/classes.php”

时间:2011-12-09 17:26:23

标签: php symfony

我在Ubuntu 11.10上安装了Symfony 2.0.7。我有这个问题:

我使用以下命令更改了cache e logs目录的权限:

chmod 777 -R cache
chmod 777 -R logs

以及我期待的所有功能。

然后我做了:

app/console cache:clear
  

使用debug true清除dev环境的缓存

     

缓存/ dev的权限更改为755,symfony无法写入:

     

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

     

在/var/www/myapp/app/bootstrap.php.cache第1079行   在/var/www/myapp/app/bootstrap.php.cache第1017行的ClassCollectionLoader :: writeCacheFile()中   在ClassCollectionLoader :: load()/var/www/myapp/app/bootstrap.php.cache第682行   at Kernel-> loadClassCache()in /var/www/myapp/web/app_dev.php第23行

如何在Symfony 2中解决这个明显的错误?

4 个答案:

答案 0 :(得分:52)

请参阅Configuration and Setup部分中的设置权限旁注。将ACL方法与setfacl一起使用。

e.g。

sudo setfacl -R -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs

(其中apache是您的HTTPD用户)

答案 1 :(得分:7)

好吧,我正在使用setfacl来避免这些问题,但我仍然遇到问题。 我正在处理标准用户目录,所以这对我不起作用:

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

如果你也这样做:(当然是必要的用户)

sudo rm -rf app/cache app/logs

然后,作为NORMAL用户创建两个目录,然后将以下命令应用为NORMAL用户(不带sudo):

exit (from root if necessary)
mkdir app/cache app/logs

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\  -f1`
setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs
setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs

注意:请记住-d\-f1

之间有两个空格 祝你好运!

答案 2 :(得分:0)

在我的情况下,我只是以root用户身份执行:

sudo -u apache app/console ca:cl

apache - 这取决于您的网站目录的所有者。假设您正在为Web服务器使用apache,则默认为apache。

答案 3 :(得分:0)

通过查看您的帖子,我到了这个页面

http://symfony.com/doc/current/setup/file_permissions.html

然后我这样做了:

HTTPDUSER = ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1

sudo setfacl -R -m u:" $ HTTPDUSER":rwX -m u:whoami:rwX var

sudo setfacl -dR -m u:" $ HTTPDUSER":rwX -m u:whoami:rwX var

它解决了我的问题