symfony2:写入缓存目录失败

symfony2:写入缓存目录失败,symfony,Symfony,我不得不使用 app/console cache:clear command 在生成实体时解决问题的步骤 我现在无法在以下位置加载我的主页: http://localhost/projet_etienne/web/app_dev.php 它说: RuntimeException:无法写入缓存文件“/var/www/projet_etienne/app/cache/dev/classes.php” 我对缓存业务了解不多 在我的app/cache文件夹中,我得到了一个dev、一个devu

我不得不使用

app/console cache:clear  command
在生成实体时解决问题的步骤

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

  http://localhost/projet_etienne/web/app_dev.php
它说:

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

我对缓存业务了解不多

在我的
app/cache
文件夹中,我得到了一个
dev
、一个
devu new
、一个
devu old
文件夹。这正常吗

通过以下方式生成:

[错误例外] 警告:重命名(/var/www/projet_-etien/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行


请帮忙

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

您也可以导航到
/www/projet\u etienne/app/cache/
并手动删除其中的文件夹(dev、dev\u new、dev\u old)

如果这不能解决问题,请确保将这些文件夹的副本保存在某个位置以放回原处


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

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

尝试以下方法(在项目的根目录中,假设您在诸如OS X或Linux之类的Unixy环境中):


rm-rf应用程序/cache/dev*
有关良好明确的解决方案,请参阅
安装和配置Symfony
部分中的
设置权限
部分:

设置权限

安装Symfony时的一个常见问题是应用程序/缓存和 应用程序/日志目录必须可由web服务器和 命令行用户。在UNIX系统上,如果您的web服务器用户 与命令行用户不同,您可以尝试以下方法之一: 以下是解决方案

  • 将同一用户用于CLI和web服务器
  • 在开发环境中,通常使用相同的方法 用于CLI和web服务器的UNIX用户,因为它避免了 设置新项目时会出现这些权限问题。这可能是 通过编辑您的web服务器配置(例如 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
    
    $ 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
    
  • 在不支持chmod+a的系统上使用ACL
  • 有些系统不支持chmod+a,但支持另一个实用程序 叫做setfacl。您可能需要在分区上启用ACL支持 并在使用setfacl之前安装它(就像Ubuntu一样)。这 使用命令尝试确定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
    
    $ 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); // This will let the permissions be 0775
    
    // or
    
    umask(0000); // This will let the permissions be 0777
    
    请注意,当您可以在服务器上访问ACL时,建议使用ACL 因为更改umask不是线程安全的

    资料来源:

    我将整个目录从我的Windows安装移动到unix生产服务器,并收到了相同的错误。为了解决这个问题,我在unix中运行了这两行代码,一切都开始正常运行

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

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

    Symfony 2

    chmod -R 777 app/cache app/logs
    
    Symfony 3目录结构

    chmod -R 777 var/cache var/logs
    
    额外资源 (前面提到)

    -另外还包括一个铸网安装


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

    可能您忘记了更改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
    
    希望能有所帮助。

    我执行了:

    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
    
    它解决了访问错误

    切勿使用unsecure 777解决特定的访问问题:


    如果symfony版本小于2.8


    sudo chmod-R 777 app/cache/*
    只需使用此acl cmd,下次创建var中的文件时,它将具有www数据用户的R/w/x权限

    cd var 
    rm -rf *
    cd ..
    setfacl -d -m u:www-data:rwx var
    
    说明:

    setfacl -> Set acl command    
    -d -> default behavior    
    -m -> modify 
    u:www-data: -> for user 
    rwx -> adding permissions  
    var -> on the folder
    

    如果您在使用docker(my Symfony 5.1版)启动Symfony项目时遇到此错误。或类似以下的错误:

    未捕获异常:读取上游时未能写入文件“/var/www/html/mysite.com.local/var/cache/dev/App_KernelDevDebugContainer.xml”

    未捕获警告:文件内容(/var/www/html/mysite.com.local/var/cache/dev/App_kerneldevdebugcontainerdepreactions.log):读取上游时打开流失败:权限被拒绝

    下面的修理工帮助了我

    在nginx容器的Dockerfile中添加行:

    RUN usermod -u 1000 www-data
    
    RUN usermod -u 1000 www-data
    
    在php fpm容器的Dockerfile中添加行:

    RUN usermod -u 1000 www-data
    
    RUN usermod -u 1000 www-data
    

    然后删除目录“/var/cache”、“/var/log”中的所有内容,并重建docker的容器。

    检查缓存文件夹persmisions。它必须是可写的。你可以这样做:chmod 777-R app/cache/tha