symfony2:未能写入caching目录
我不得不使用
app/console cache:clear command
在生成实体时解决问题。
我现在无法加载我的主页:
http://localhost/projet_etienne/web/app_dev.php
它说 :
RuntimeException:无法写入caching文件“/var/www/projet_etienne/app/cache/dev/classes.php”。
我不太了解这个caching业务!
在我的app/cache
文件夹中,我得到了一个dev
,一个dev_new
,一个dev_old
文件夹。 这是正常的吗?
该
app/console cache:clear
通过这样的方式产生一个:
[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的/包/ FrameworkBundle /命令/ CacheClearComm
和.php第77行
请帮忙!
对于一个好的和明确的解决scheme,请参阅Installing and Configuring Symfony
部分中的Setting up Permissions
部分:
设置权限
安装Symfony时的一个常见问题是app / cache和app / logs目录必须由Web服务器和命令行用户写入。 在UNIX系统上,如果您的Web服务器用户与命令行用户不同,则可以尝试以下解决scheme之一。
- CLI和Web服务器使用相同的用户
在开发环境中,为CLI和Web服务器使用相同的UNIX用户是一种常见的做法,因为它在设置新项目时避免了任何这些权限问题。 这可以通过编辑您的Web服务器configuration来完成(例如,通常为Apache的httpd.conf或apache2.conf)并将其用户设置为与CLI用户相同(例如,对于Apache,更新用户和组值)。
- 在支持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
- 在不支持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 -mu:"$HTTPDUSER":rwX -mu:`whoami`:rwX app/cache app/logs $ sudo setfacl -dR -mu:"$HTTPDUSER":rwX -mu:`whoami`:rwX app/cache app/logs
如果这不起作用,请尝试添加-n选项。
- 不使用ACL
如果前面的方法都不适用,请更改umask,以使caching和日志目录可以分组写入或全局可写(取决于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
请注意,如果您在服务器上访问ACL,build议使用ACL,因为更改umask不是线程安全的。
源: 清除caching时写入caching文件“/var/www/myapp/app/cache/dev/classes.php”失败
这很可能意味着目录和/或子目录不可写入。 许多人忘记了子目录。
Symfony 2
chmod -R 777 app/cache app/logs
Symfony 3目录结构
chmod -R 777 var/cache var/logs
其他资源
Symfony的权限解决scheme (前面提到过)。
KPN大学的权限解决scheme – 另外还包括安装屏幕。
注意:如果您使用的是Symfony 3目录结构,请使用var/cache
和var/logs
replaceapp/cache
和app/logs
var/logs
。
如果该文件夹已经可写,那不是问题。
您也可以导航到/www/projet_etienne/app/cache/
并/www/projet_etienne/app/cache/
删除那里的文件夹(dev,dev_new,dev_old)。
如果这不能解决问题,请确保将这些文件夹的副本保存在某处
我知道这不是它应该做的方式,但它现在对我来说已经好几次了。
你可能中止了一个clearcache,现在你已经有了一个app / cache / dev_old。
试试这个(在你的项目的根目录下,假设你在Unixy环境如OS X或Linux):
rm -rf app/cache/dev*
也许你忘了更改应用程序/caching应用程序/日志的权限
我正在使用Ubuntu
sudo chmod -R 777 app/cache sudo chmod -R 777 app/logs sudo setfacl -dR -mu::rwX app/cache app/logs
希望能帮助到你..
我将整个目录从Windows安装移动到unix生产服务器,我得到了同样的错误。 为了解决这个问题,我只是在unix中运行这两行,一切都开始正常运行
rm -rf app / cache / * rm -rf app / logs / *
我执行了:
ps aux | grep apache
有这样的事情:
root 28147 0.0 5.4 326336 27024 ? Ss 20:06 0:00 /usr/sbin/apache2 -k start www-data 28150 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start www-data 28151 0.0 4.4 329016 22124 ? S 20:06 0:00 /usr/sbin/apache2 -k start www-data 28152 0.1 6.0 331252 30092 ? S 20:06 0:00 /usr/sbin/apache2 -k start www-data 28153 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start www-data 28154 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start www-data 28157 0.0 1.3 326368 6852 ? S 20:06 0:00 /usr/sbin/apache2 -k start user 28297 0.0 0.1 15736 924 pts/4 S+ 20:12 0:00 grep --color=auto apache
所以我没有访问的用户竟然是www-data
因此我执行命令:
sudo chown -R www-data app/cache sudo chown -R www-data app/logs
并解决了访问错误。
永远不要使用不安全的777来解决特定的访问问题:
sudo chmod -R 777 app/cache sudo chmod -R 777 app/logs