Vagrant 和 symfony2

     2023-02-24     247

关键词:

【中文标题】Vagrant 和 symfony2【英文标题】:Vagrant and symfony2 【发布时间】:2013-08-04 11:54:30 【问题描述】:

我遇到了一个与在 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 时,权限并没有改变。但是,当我从 OUTSIDE Webroot 文件夹中的 vagrant 环境中对文件或目录进行 chmod 时,权限仍然存在。由于 symfony 在环境中没有 r/w 权限,它无法创建必要的缓存和日志文件。当我从 osx 的命令运行 symfony 时,一切正常。

有没有人知道如何更改 /webroot 目录的权限,以便 vagrant 环境中的东西实际上可以读取和写入它,因为 chmod 似乎不起作用?

【问题讨论】:

【参考方案1】:

更新于 2016 年 1 月 15 日。Vagrant 1.7.4+ 和 Symfony 3 的说明。有效。

在全新的 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 欢迎屏幕。我希望对某人有所帮助!

【讨论】:

非常感谢你拯救了我的一天。 @MuzafarAli 查看最后一个 vagrant 文档并搜索同步文件夹?也许他们在 1.9.3 中改变了你的做法?如果您发现任何内容,我很乐意接受对答案的补充或将其更改为“1.9.3:改为执行此操作”。通过粗略的搜索,我找不到任何 BC 破坏性 API 更改:-/ @Jimbo - 刚刚检查它现在工作正常.. 干杯!【参考方案2】:

我认为这是用户权利的问题。您的 apache + php 可能是由 root 启动的。您必须使用 root 设置权限。

两种可能:

sudo su
chmod -R 777 app/cache

sudo chown -v app/cache
sudo chmod -R 777 app/cache

您可能必须对日志文件执行相同的操作。

如果你需要的话,我的流浪文件:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "precise64"  #Box Name
  config.vm.box_url = "http://files.vagrantup.com/precise64.box" #Box Location
  config.vm.provider :virtualbox do |virtualbox|
      virtualbox.customize ["modifyvm", :id, "--memory", "2048"]
  end
  config.vm.synced_folder ".", "/home/vagrant/synced/", :nfs => true
  #config.vm.network :forwarded_port, guest: 80, host: 8080 # Forward 8080 rquest to vagrant 80 port
  config.vm.network :private_network, ip: "1.2.3.4"
  config.vm.network :public_network
  config.vm.provision :shell, :path => "vagrant.sh"
end

vagrant.sh

#!/usr/bin/env bash

#VM Global Config
apt-get update

#Linux requirement
apt-get install -y vim git

#Apache Install
apt-get install -y apache2

#Apache Configuration
rm -rf /var/www
ln -fs /home/vagrant/synced/web /var/www
chmod -R 755 /home/vagrant/synced

#Php Install
apt-get install -y python-software-properties
add-apt-repository -y ppa:ondrej/php5
apt-get update

apt-get install -y php5 libapache2-mod-php5

#Php Divers
apt-get install -y php5-intl php-apc php5-gd php5-curl

#PhpUnit
apt-get install -y phpunit
pear upgrade pear
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony.com
pear install --alldeps phpunit/PHPUnit


#Php Configuration
sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 10M/" /etc/php5/apache2/php.ini
sed -i "s/short_open_tag = On/short_open_tag = Off/" /etc/php5/apache2/php.ini
sed -i "s/;date.timezone =/date.timezone = Europe\/London/" /etc/php5/apache2/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1024M/" /etc/php5/apache2/php.ini
sed -i "s/_errors = Off/_errors = On/" /etc/php5/apache2/php.ini

#Reload apache configuration
/etc/init.d/apache2 reload

#Composer
php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
mv -f composer.phar /usr/local/bin/composer.phar
alias composer='/usr/local/bin/composer.phar'

#Postgres
apt-get install -y postgresql postgresql-client postgresql-client php5-pgsql
su - postgres -c "psql -U postgres -d postgres -c \"alter user postgres with password 'vagrant';\""

【讨论】:

这不起作用。在 vagrant 环境中进行 Chmod-ing 或 Chowing,即使超级用户立即恢复并且即使命令成功执行,权限/所有权也不会更改。关于如何让 Chmod 或 Chown 命令持久化的任何见解。 想通了!问题是 fmode 和 dmode 设置不正确,因为 vagrant 文件夹安装在 vboxsf 上。我只是将行 config.vm.synced_folder "../gipsydanger/", "/vagrant", :extra => 'dmode=777,fmode=777' 添加到我的 Vagrantfile 中。还是谢谢! 我已经对这个答案进行了一些轻微的改进,并将其变成了一个随时可用的配置模块,尤其是与 Symfony2 一起使用。发布在Github @IsaacDiamondn 感谢您的评论!也为我工作。请注意::extra 参数已重命名为 :mount_options,因此该行应为 config.vm.synced_folder "www", "/var/www", :mount_options => ["dmode=777,fmode=777"] @pau.moreno 的建议对我有用,谢谢。【参考方案3】:

nfs 的更新答案:

config.vm.synced_folder "www", "/var/www", type:nfs, :nfs =>  :mount_options => ["dmode=777","fmode=777"] 

【讨论】:

【参考方案4】:

除了将缓存和日志文件夹的位置更改为 /tmp 之外,没有什么对我有用

AppKernel.php

public function getCacheDir()

    if (in_array($this->getEnvironment(), ['test','dev'])) 
        return '/tmp/sfcache/'.$this->getEnvironment();
    
    return parent::getCacheDir();


public function getLogDir()

    if (in_array($this->getEnvironment(), ['test','dev'])) 
        return '/tmp/sflogs/'.$this->getEnvironment();
    
    return parent::getLogDir();

【讨论】:

Symfony2 +Vagrant 性能 - 运行缓慢 - 加速?

】Symfony2+Vagrant性能-运行缓慢-加速?【英文标题】:Symfony2+Vagrantperformance-runningslow-speedingup?【发布时间】:2014-07-2122:18:45【问题描述】:我已经开始使用vagrant和Symfony2.*来开发Web项目。我用的是Windows,性能很慢,因为不支持nfs挂... 查看详情

如何在没有 nfs 的 Vagrant 上运行 Symfony2 应用程序(例如在 Windows 上)?

】如何在没有nfs的Vagrant上运行Symfony2应用程序(例如在Windows上)?【英文标题】:HowtorunSymfony2applicationonVagrantwithoutnfs(onWindows,forexample)?【发布时间】:2014-12-1011:14:00【问题描述】:在Vagrant/Windows上使用默认设置运行Symfony2应用程... 查看详情

Vagrant,共享文件夹:利用 inotify over NFS

...verNFS【发布时间】:2014-02-0701:26:26【问题描述】:我们的Symfony2webapp在开发模式下使用Asseticwatcher随时重新编译资产。webapp在Docker容器中运行,该容器在VagrantVM(Ubuntu12.04Precise) 查看详情

markdown[vagrant]fedora#linux上的vagrant和virtualbox安装(代码片段)

查看详情

shdocker和vagrant(代码片段)

查看详情

vagrant里面不能运行docker,怎么回事

 以下内容均出自Vagrant作者(MitchellHashimoto)与Docker作者(SolomonHykes)在stackoverflow上面一个问题讨论。在这个问题中,双方阐述了vagrant和docker的特点和使用范围,对于深入理解vagrant和docker很有意义,因此笔者翻译出来,以供大家讨... 查看详情

Vagrant 和 NGINX 仅适用于 80 以外的端口

】Vagrant和NGINX仅适用于80以外的端口【英文标题】:VagrantandNGINXonlyworksonportsotherthan80【发布时间】:2015-09-3021:32:36【问题描述】:出于本文的目的,我使用Vagrant来启动NGINX(通过Docker,但我认为这并不重要)。我的Vagrant如下所示... 查看详情

使用vagrant和ansible

...两个工具配合的很好.这个指南会叙述如何同时配合使用Vagrant和Ansible.如果你对Vagrant还不了解,你应该看看这个文档 thedocumentation.假设你已经安装了Ansible,在Git上检测,运行的也很好, 查看详情

Vagrant 共享和同步文件夹

】Vagrant共享和同步文件夹【英文标题】:Vagrantsharedandsyncedfolders【发布时间】:2013-08-3008:50:52【问题描述】:我创建了一个Vagrantfile,内容如下:Vagrant::Config.rundo|config|config.vm.define:foodo|cfg|cfg.vm.box=\'foo\'cfg.vm.host_name="foo.localdomain.l... 查看详情

Symfony2 和 Doctrine:一对多关系

】Symfony2和Doctrine:一对多关系【英文标题】:Symfony2andDoctrine:OnetoManyrelationship【发布时间】:2012-08-2319:12:20【问题描述】:我正在用Symfony2和Doctrine编写应用程序。以下是所有可能需要的代码:https://gist.github.com/3440325此代码块工... 查看详情

Symfony2,学说和数据域

】Symfony2,学说和数据域【英文标题】:Symfony2,Doctrineanddatadomain【发布时间】:2014-10-2219:36:55【问题描述】:在一个使用Doctrine作为ORM的Symfony2项目中,我有许多实体专门用于存储datadomain。根据您的经验:哪个是该数据域实体的... 查看详情

vagrant初识(代码片段)

  vagrant是部署虚拟开发环境的工具,他可以简化虚拟机配置,为我们搭建和配置轻量级可重用,可移植的开发环境。他能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。  vagrant支持VirtualBox,VMware,AWS... 查看详情

Symfony2 监听器和会话

】Symfony2监听器和会话【英文标题】:Symfony2ListenersandSessions【发布时间】:2012-12-1316:15:39【问题描述】:我正在尝试在Symfony2监听器(Symfonyv.2.0.16)中设置会话数据,但不知何故监听器不会注册会话变量。我有以下几点:我的serv... 查看详情

Vagrant 和 Docker nfs 失败:文件描述符错误

】Vagrant和Dockernfs失败:文件描述符错误【英文标题】:VagrantandDockernfsfailed:Badfiledescriptor【发布时间】:2016-05-1118:00:13【问题描述】:经过大量审查,尝试在Vagrant中使用rsync并以Docker作为提供者。(双向同步)我继续使用nfs在VMbo... 查看详情

PHPUnit、接口和命名空间 (Symfony2)

】PHPUnit、接口和命名空间(Symfony2)【英文标题】:PHPUnit,InterfacesandNamespaces(Symfony2)【发布时间】:2011-12-3013:36:50【问题描述】:我目前正在为Symfony2开发一个开源包,并且真的希望它在单元测试覆盖率和一般可靠性方面成为狗的麻... 查看详情

Symfony2 和 DateTimePicker 日期格式错误?

】Symfony2和DateTimePicker日期格式错误?【英文标题】:Symfony2andDateTimePickerbaddateformat?【发布时间】:2014-07-2605:40:46【问题描述】:我正在尝试使用symfony表单选择日期时间。这是我的表格:/***@paramFormBuilderInterface$builder*@paramarray$opti... 查看详情

Symfony2 和 composer 没有安装包

】Symfony2和composer没有安装包【英文标题】:Symfony2andcomposernotinstallingpackages【发布时间】:2013-10-0220:53:42【问题描述】:我正在尝试在Symfony2上安装FOSUserBundle。尝试在终端中运行此命令composer更新Friendsofsymfony/user-bundle我收到此错... 查看详情

使用vagrant在命令行快速创建虚拟机

一、Vgrant的安装Vagrant是一个跨平台的虚拟机管理工具,我们以Deepin20.2.3为例,安装和使用Vagrant。我们在这里所说的Vagrant包括Vagrant工具本身和虚拟引擎工具VirtualBox。1.安装Vagrant安装vagrant时,使用的VirtualBox版本必须要得到对应Va... 查看详情