var目录的Symfony 4文件权限每次都会改变

Dir*_*ber 4 file-permissions symfony symfony4

我正在设置一个新服务器并安装了Ubuntu 18.04Apache2。我的项目存储在/var/www/project. 在apache2.conf我添加

<Directory /var/www/project/>
    AllowOverride All
    Order Allow,Deny
    Allow from All
</Directory>
Run Code Online (Sandbox Code Playgroud)

在我的虚拟主机文件中,我指向/var/www/project/public 当我转到服务器的 IP 地址时,我看到了我的项目并且一切正常,除了一件事:

每当我使用php bin/console cache:clear我的目录权限清除缓存时,都会var搞砸,这会导致生产环境中出现错误。

我可以解决这个问题:

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

但是即使我再次清除缓存,问题也会再次出现。我尝试了不同的用户,包括root,但总是同样的问题。我不明白是什么原因造成的。在文件权限的文档中,它说:

在 Symfony 中3.x,你需要做一些额外的工作来确保你的缓存目录是可写的。但这不再是事实!在 Symfony 中4,一切都会自动运行

那么不适合我,但是什么可能导致问题?

po_*_*aka 7

问题

缓存目录归执行cache:clear命令的用户所有。

  • 假设您的项目文件归www-data.
  • 用root用户清除缓存
  • 缓存归root所有
  • www-data 无法写入缓存目录

解决方案

使用拥有文件的用户执行缓存:清除。

  • 以 www-data 身份登录: su www-data -s /bin/bash
  • 清除缓存 ./bin/console cache:clear

根据您的设置,您的www-data用户可能会有所不同