【问题标题】:Vagrant and symfony2Vagrant 和 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 似乎不起作用?

【问题讨论】:

    标签: php macos apache symfony vagrant


    【解决方案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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 2017-08-18
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多