symfony2:无法写入缓存目录

Mat*_*eil 59 symfony

我不得不使用

app/console cache:clear  command
Run Code Online (Sandbox Code Playgroud)

在生成实体时解决问题.

我现在无法加载我的主页:

  http://localhost/projet_etienne/web/app_dev.php
Run Code Online (Sandbox Code Playgroud)

它说 :

RuntimeException:无法写入缓存文件"/var/www/projet_etienne/app/cache/dev/classes.php".

我对这个缓存业务了解不多!

在我的app/cache文件夹中,我得到了一个dev,一个dev_new,一个dev_old文件夹.这是正常的吗?

app/console cache:clear
Run Code Online (Sandbox Code Playgroud)

通过以下方式生成:

[ErrorException]警告:重命名(/ var/www/projet_etienne/app/cache/dev,/ var/www/projet_etien
ne/app/cache/dev_old):/ var/www/projet_etienne/vendo
r/symfony中的目录不为空/ symfony/src/Symfony/Bundle/FrameworkBundle/Command/CacheClearComm
and.php第77行

请帮忙!

ziz*_*jab 96

一个良好的和明确的解决办法看到Setting up Permissions的部分 Installing and Configuring Symfony章节:

设置权限

安装Symfony时的一个常见问题是app/cache和app/logs目录必须可由Web服务器和命令行用户写入.在UNIX系统上,如果Web服务器用户与命令行用户不同,则可以尝试以下解决方案之一.

  1. 将相同的用户用于CLI和Web服务器

在开发环境中,通常的做法是将相同的UNIX用户用于CLI和Web服务器,因为它在设置新项目时避免了任何这些权限问题.这可以通过编辑Web服务器配置(例如,通常为Apache的httpd.conf或apache2.conf)并将其用户设置为与CLI用户相同(例如,对于Apache,更新用户和组值)来完成.

  1. 在支持chmod + a的系统上使用ACL

许多系统允许您使用chmod + a命令.首先尝试这个,如果出现错误 - 尝试下一个方法.这使用命令尝试确定您的Web服务器用户并将其设置为HTTPDUSER:

$ rm -rf app/cache/*
$ rm -rf app/logs/*

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Run Code Online (Sandbox Code Playgroud)
  1. 在不支持chmod + a的系统上使用ACL

有些系统不支持chmod + a,但支持另一个名为setfacl的实用程序.您可能需要在分区上启用ACL支持并在使用之前安装setfacl(与Ubuntu一样).这使用命令尝试确定您的Web服务器用户并将其设置为HTTPDUSER:

$ HTTPDUSER=`ps aux | 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 app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
Run Code Online (Sandbox Code Playgroud)

对于Symfony 3,它将是:

$ HTTPDUSER=`ps aux | 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/cache var/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var/cache var/logs
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试添加-n选项.

  1. 不使用ACL

如果以上方法都不适合您,请更改umask,以便缓存和日志目录可以进行组写或可写入世界(具体取决于Web服务器用户和命令行用户是否在同一组中).要实现此目的,请将以下行放在app/console,web/app.php和web/app_dev.php文件的开头:

umask(0002); // This will let the permissions be 0775

// or

umask(0000); // This will let the permissions be 0777
Run Code Online (Sandbox Code Playgroud)

请注意,当您在服务器上访问ACL时,建议使用ACL,因为更改umask不是线程安全的.

http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup

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

  • 这就是答案. (8认同)

tim*_*com 22

很可能这意味着目录和/或子目录不可写.许多人忘记了子目录.

Symfony 2

chmod -R 777 app/cache app/logs
Run Code Online (Sandbox Code Playgroud)

Symfony 3目录结构

chmod -R 777 var/cache var/logs
Run Code Online (Sandbox Code Playgroud)

其他资源

Symfony的权限解决方案(前面提到过).

KPN大学的权限解决方案 - 另外还包括安装时的屏幕播放.

注意:如果您使用的是Symfony 3目录结构,请替换app/cacheapp/logs使用var/cachevar/logs.


Mat*_*ijk 17

如果文件夹已经可写,那就不是问题了.

您也可以导航到/www/projet_etienne/app/cache/并手动删除其中的文件夹(dev,dev_new,dev_old).

如果这不能解决问题,请务必在某处保存这些文件夹的副本

我知道这不是它应该做的方式,但现在它对我有用了几次.

  • 这里的实际问题是这些子目录不可写.而不是删除,将它们设置为可写`chmod -R 777/app/cache`等... (6认同)
  • 我看到不好的做法,我认为zizoujab答案更好 (3认同)

Boy*_*ema 12

你可能中途中止了一个clearcache,现在你已经有了app/cache/dev_old.

试试这个(在项目的根目录中,假设您使用的是OS X或Linux等Unixy环境):

rm -rf app/cache/dev*


小智 8

也许你忘了更改app/cache app/log的权限

我正在使用Ubuntu

sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你..