我已经设置了一个新的 symfony 4 项目。这是为了本地开发而在 vagrant 上运行的。现在我遇到了文件权限问题。
Symfony 本身说这应该是任何问题:设置或修复文件权限。
如果我运行
bin/console cache:clear
,则代码运行良好。但是一旦我更改了代码,我就会收到以下错误:
(1/1) IOException
Unable to write to the "/var/www/path_to_project/var/cache/dev" directory.
再次运行bin/console cache:clear
,代码工作正常。但又改了代码,又出现同样的写入问题。我尝试过
chmod +r 777 var/cache/dev
,但这并没有改变什么。我该如何解决这个问题?
Ahmed bhs的输出
$ ls -la var/
total 16
drwxrwxr-x 4 vagrant vagrant 136 Jan 7 11:41 ./
drwxrwxr-x 14 vagrant vagrant 476 Jan 7 12:30 ../
drwxrwxr-x 3 vagrant vagrant 102 Jan 7 12:57 cache/
drwxrwxr-x 2 vagrant vagrant 68 Jan 7 11:41 log/
$ id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),4(adm),24(cdrom),27(sudo),30(dip),33(www-data),46(plugdev),110(lxd),115(lpadmin),116(sambashare),998(rvm),1003(www-user)
编辑 问题不是 symfony 而是我的 vagrantfile 的配置。 Synced_folder 的所有者为“vagrant”,而 apache 的所有者为“www-data”。制作了所有“www-data”,现在工作正常。完全与 symfony 无关!
sudo chmod -R 777 /var/www/path_to_project/var/cache/*
chmod -R 0777 var
,而不是为单独的文件夹运行命令。
cahce
目录更改为未安装的路径。 我添加了
src/Kernel.php
class Kernel extends BaseKernel
{
use MicroKernelTrait;
public function getCacheDir(): string
{
if ($this->getEnvironment() === 'local') {
return '/tmp/mail-service/' . $this->getEnvironment() . '/cache';
} else {
return parent::getCacheDir();
}
}
}
并添加到项目根文件中.env.local
APP_ENV=local