首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >symfony2 :无法写入缓存目录

symfony2 :无法写入缓存目录
EN

Stack Overflow用户
提问于 2012-11-04 01:48:33
回答 10查看 161.6K关注 0票数 62

我不得不使用

代码语言:javascript
复制
app/console cache:clear  command

解决生成实体时的问题。

我现在无法在以下位置加载我的主页:

代码语言:javascript
复制
  http://localhost/projet_etienne/web/app_dev.php

上面写着:

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

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

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

这个

代码语言:javascript
复制
app/console cache:clear

通过以下方式生成:

缓存警告:重命名(/var/www/projet_etienne/

/ ErrorException /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行

请帮帮我!

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-02-25 23:17:37

要获得一个好的、明确的解决方案,请参阅Installing and Configuring Symfony部分中的Setting up Permissions部分:

设置权限

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

  1. 对命令行界面和web服务器

使用同一用户

在开发环境中,CLI和web服务器使用相同的UNIX用户是一种常见的做法,因为这样可以避免在设置新项目时出现这些权限问题。这可以通过编辑您的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

  1. 在不支持chmod +a

的系统上使用ACL

有些系统不支持chmod +a,但支持另一个名为setfacl的实用程序。在使用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

对于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

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

不使用ACL的

如果之前的方法都不适用于您,请更改umask,使缓存和日志目录成为组可写目录或全局可写目录(取决于web服务器用户和命令行用户是否在同一组中)。为此,请在app/console、web/app.php和web/app_dev.php文件的开头放置以下行:

umask(0002);//权限为0775 //或umask(0000);//权限为0777

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

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

来源:Failed to write cache file "/var/www/myapp/app/cache/dev/classes.php" when clearing the cache

票数 102
EN

Stack Overflow用户

发布于 2014-06-18 03:20:34

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

Symfony 2

代码语言:javascript
复制
chmod -R 777 app/cache app/logs

Symfony 3目录结构

代码语言:javascript
复制
chmod -R 777 var/cache var/logs

其他资源

Permissions solution by Symfony (前面提到过)。

Permissions solution by KPN University -另外还包括安装时的屏幕显示。

注意:如果你使用Symfony 3目录结构,用var/cachevar/logs替换app/cacheapp/logs

票数 25
EN

Stack Overflow用户

发布于 2012-11-04 04:59:43

如果文件夹已经是可写的,那么这不是问题。

你也可以导航到/www/projet_etienne/app/cache/,然后手动删除其中的文件夹(dev,dev_new,dev_old)。

如果这不能解决问题,请确保将这些文件夹的副本保存到某个位置。

我知道这不应该是这样做的,但现在它在我身上起了几次作用。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13211829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档