我遇到了一个与在 Vagrant 环境中安装 Symfony2 有关的奇怪问题。环境设置正确并且正在运行一个 Web 服务器,该服务器从与位于 vagrant 基本目录中的 vagrant 环境共享的文件夹中提供文件。
基本上,vagrant 在目录 foo 中启动,然后在 foo 中,有一个名为 webroot 的目录。 Vagrant 自动共享 foo 目录。 apache 服务器设置为运行,以便 webroot 是基本的 http 目录。这一切工作正常,我能够提供基本的 HTML、PHP 和 MySQL 连接测试正常。
我使用 composer 以推荐的方式安装 vagrant,安装到/webroot/中名为 Symfony 的目录中。所有文件现在都存在于正确的目录中。配置正确,在/config.php 中没有Symfony 声称需要更改的项目。
当我尝试加载/app_dev.php 时出现问题。它抛出一个异常,声称它无法在/app 目录中创建一个名为 cache 的文件。
由于我使用的 vagrant box 不支持 chmod +a,我选择通过在 app_dev 中取消注释 umask(0000) 来设置权限。假设这是一个权限问题,我尝试使用 chmod 将 vagrant 环境和 osx 中的所有权限都调整为 777。
奇怪的是,当我在 vagrant 环境中对文件或目录进行 chmod 时,它声称已正确设置 777,但是当我 ls -l 时,权限没有改变。但是,当我从外部 chmod 文件或目录时,webroot 文件夹中的 Vagrant 环境,权限仍然存在。由于 symfony 在环境中没有 r/w 权限,它无法创建必要的缓存和日志文件。当我从 osx 命令运行 symfony 时,一切正常。
有没有人知道如何更改/webroot 目录的权限,以便 vagrant 环境中的东西实际上可以读取和写入它,因为 chmod 似乎不起作用?
最佳答案
Update as of 15th Jan 2016. Instructions for Vagrant 1.7.4+ and Symfony 3. This works.
在全新的 Ubuntu 14.04 安装中,安装了 ACL,但我无法使用 +a 或 setfacl 来修复权限问题,当然,一旦您在 vagrant 中更改终端中的任何权限,它们就会重置为 Vagrant :又是 Vagrant 。
我在 vagrant 文件中添加了以下内容:
# Symfony needs to be able to write to it's cache, logs and sessions directory in var/
config.vm.synced_folder "./var", "/vagrant/var",
:owner => 'vagrant',
:group => 'www-data',
:mount_options => ["dmode=775","fmode=666"]
这告诉 Vagrant 同步 var/logs 和 var/cache(不要与/var/混淆,它们在根 Symfony 目录中)并让它们归 vagrant:www-data 所有。这与执行 sudo chown vagrant:www-data var/
相同,除了 Vagrant 现在为您执行并强制执行,而不是强制执行 vagrant:vagrant。
请注意这里没有 777 个“hacks”。
一旦我添加了它,我就没有在 apache 日志中收到任何更多的权限错误,并且我得到了一个漂亮的 Symfony 欢迎屏幕。我希望这对某人有所帮助!
关于php - Vagrant 和 symfony2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029973/