2016-02-29 48 views
2

我有一个Symfony的项目在生产和运行sudo php app/console cache:clear --env=prod后,该文件夹的权限,成为Symfony的缓存:清除命令更改文件夹的所有者

drwxr-xr-x 11 root root 4096 Feb 29 15:08 prod

这不会让用户www-data(apache的默认用户)再次访问它。

如何清除缓存并将www数据读取/写入缓存文件夹?

此外,对于开发模式我得到 The stream or file "../app/logs/dev.log" could not
be opened: failed to open stream: Permission denied
和dev.log文件已经通过以下权限创建运行php console cache:clear-rw-r--r-- 1 www-data www-data 2840530 Feb 29 15:01 dev.log

+0

'sudo -u {owner} php cache:clear -e prod' – Dmitry

+0

我不建议您使用此命令清除缓存。我发现它并不总是删除这些文件。而是手动删除缓存中的prod和dev目录/ –

+0

不要将其作为sudo运行。除非您指定,否则cache:clear将在清除缓存后执行“预热”。这意味着它创建缓存目录的基本文件夹结构。由此产生的权限将是根(如果从sudo运行) – DevDonkey

回答

7

请参阅http://symfony.com/doc/current/book/installation.html#configuration-and-setup中的“设置权限”。

如果您使用Ubuntu,你可以使用setfacl

sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs 
sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs 

编辑:

$ rm -rf var/cache/* var/logs/* var/sessions/* 

$ 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 chmod -R +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var 
$ sudo chmod -R +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var 

如果您的PC上没有命令setfacl的,你需要安装;

sudo apt-get install acl 
+0

我刚刚运行了这些命令,但dev.log文件仍然不可写入。我无法运行任何命令。 '-rw-r - r-- 1 www-data www-data 3083769 Feb 29 15:36 dev.log -rw-r - r-- 1 www-data www-data 1728 Feb 29 14:51 prod .log ' –

+0

只有日志或高速缓存出现错误时仍会出现错误? –

+0

只有日志。缓存从不抛出错误。只是该命令试图写入dev.log。 –

-1

我们遇到了同样的问题,我们结束了运行缓存:明确命令作为Apache用户。

另一种选择是让脚本以sudo身份运行缓存清除命令,然后重新初始化文件夹权限。

+0

不是我的失败,而是像sudo一样运行控制台命令会导致您进入**整个**世界。 – DevDonkey