尝试使用 vagrant VM 启动并运行 Symfony2 项目。我看过无数关于此的文章,但事实证明,正确获取缓存目录权限是一件极其痛苦的事情。
在我的Vagrantfile
:
config.vm.share_folder("src", "/var/www", "../www")
我的虚拟机的fstab
文件:
proc /proc proc nodev,noexec,nosuid 0 0
/dev/mapper/ubuntu--1110-root / ext4 acl,errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
UUID=4ed7eaaf-6f42-48ba-b5ed-f0c1df9add38 /boot ext2 defaults 0 2
/dev/mapper/ubuntu--1110-swap_1 none swap sw 0 0
虚拟机上已安装acl包。
当我按照 Symfony2 安装说明在 /var/www 中运行以下命令时:
sudo setfacl -R -m u:apache:rwx -m u:username:rwx app/cache app/logs
我得到:
不支持该操作
我可以在 FS 上的任何其他目录或文件(共享目录之外)上运行该命令,并且该命令有效。发生了什么?
答案1
要绕过 Symfony2 和 Vagrant 的所有权限问题,最简单的解决方案是将运行 apache 的用户和组更改为 vagrant。为此,编辑文件 /etc/apache2/envvars 并将第 16 行和第 17 行替换为:export APACHE_RUN_USER=vagrantexport APACHE_RUN_GROUP=vagrant请注意,这些说明适用于 Ubuntu 上的 apache 2.2,请参考您的 apache 和操作系统版本进行操作。
如果你不想更改 apache 用户和组,你也可以挂载一个 ramdisk 并将你的 symfony 项目放在上面。然后 vagrant 可以修改此磁盘上的权限。请参阅此链接有关如何安装 ramdisk 的说明。
答案2
更好的解决方案是使用属性覆盖。请参阅操作码 维基。
例如在角色定义中:
override_attributes({
"apache" => {
"user" => "vagrant",
"group" => "vagrant"
}
})
我在共享文件夹中使用 Typo3 时遇到了同样的问题,无法创建临时文件。