Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 流浪汉和symfony2_Php_Macos_Apache_Symfony_Vagrant - Fatal编程技术网

Php 流浪汉和symfony2

Php 流浪汉和symfony2,php,macos,apache,symfony,vagrant,Php,Macos,Apache,Symfony,Vagrant,我遇到了一个与在流浪环境中安装Symfony2有关的奇怪问题。该环境已正确设置,并且正在运行web服务器,该服务器正在为与vagrant环境共享的文件夹中的文件提供服务,该文件夹位于vagrant的基本目录中 基本上,vagrant是在目录foo中启动的,然后在foo中有一个名为webroot的目录。Vagrant自动共享foo目录。apache服务器被设置为运行,因此webroot是基本http目录。这一切都很好,我能够提供基本的HTML、PHP和MySQL连接,测试结果良好 我使用compo

我遇到了一个与在流浪环境中安装Symfony2有关的奇怪问题。该环境已正确设置,并且正在运行web服务器,该服务器正在为与vagrant环境共享的文件夹中的文件提供服务,该文件夹位于vagrant的基本目录中

基本上,vagrant是在目录foo中启动的,然后在foo中有一个名为webroot的目录。Vagrant自动共享foo目录。apache服务器被设置为运行,因此webroot是基本http目录。这一切都很好,我能够提供基本的HTML、PHP和MySQL连接,测试结果良好

我使用composer以推荐的方式将vagrant安装到名为Symfony的/webroot/目录中。所有文件现在都存在于正确的目录中。配置是正确的,Symfony声称不需要在/config.php中更改任何项目

当我尝试加载/app_dev.php时,问题就出现了。它引发异常,声称无法在/app目录中创建名为cache的文件

由于我正在使用的vagrant框中不支持chmod+a,我选择通过在app_dev中取消注释umask(0000)来设置权限。假设这是一个权限问题,我尝试使用chmod将vagrant环境中以及osx中的所有权限调整为777

奇怪的是,当我在vagrant环境中创建文件或目录时,它声称正确设置了777,但当我使用ls-l时,权限没有改变。但是,当我从webroot文件夹内的vagrant环境外部创建文件或目录时,权限将保持不变。由于symfony在环境中没有r/w权限,因此无法创建必要的缓存和日志文件。当我从osx的命令运行symfony时,一切正常


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

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

两种可能性:

sudo su
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
流浪汉

#!/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';\""

nfs的更新答案:

config.vm.synced_folder "www", "/var/www", type:nfs, :nfs => { :mount_options => ["dmode=777","fmode=777"] }
截至2016年1月15日更新。流浪汉1.7.4+和Symfony 3的说明这很有效。

在新安装的Ubuntu 14.04上,安装了ACL,但我无法使用+a或setfacl来解决权限问题,当然,只要您在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个“黑客”


当我添加这些内容时,我在apache日志中没有再出现任何权限错误,我得到了一个漂亮的Symfony欢迎屏幕。我希望这能帮助别人

除了将缓存和日志文件夹的位置更改为/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();
}

这不管用。在vagrant环境中使用Chmod ing或Chowning,即使超级用户立即恢复,并且即使命令成功执行,权限/所有权也不会更改。任何关于如何使Chmod或Chown命令持久化的见解。都已经解决了!问题是fmode和dmode设置不正确,因为vagrant文件夹安装在vboxsf上。我只是简单地将行
config.vm.synced_文件夹“./gipsydanger/”,“/vagrant”,:extra=>'dmode=777,fmode=777'
添加到我的vagrant文件中。无论如何谢谢你!我对这个答案进行了一些轻微的改进,并将其制作成一个随时可用的资源调配模块,特别是用于Symfony2。把它贴在@IsaacDiamondn上谢谢你的评论!也为我工作。请注意:
:extra
参数被重命名为
:mount_options
,因此行应该是
config.vm.synced_文件夹“www”、“/var/www”、:mount_options=>[“dmode=777,fmode=777”
,@pau.moreno的建议对我有效,谢谢。非常感谢你救了我一天。@MuzafarAli查看最近的流浪汉文档并搜索同步文件夹?也许他们改变了你在1.9.3中的做法?如果您发现任何问题,我很乐意接受对答案的补充,或将其更改为“1.9.3:改为这样做”。通过粗略的搜索,我找不到任何破坏BC的API更改:-/@Jimbo-刚刚检查过它现在工作正常。。干杯
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();
}