流浪汉和symfony2

Isa*_*ond 13 php apache macos symfony vagrant

我有一个与在流浪者环境中安装Symfony2有关的古怪问题.环境设置正确,并且正在运行Web服务器,该服务器从与vagrant的基本目录中的vagrant环境共享的文件夹中提供文件.

基本上,vagrant是在目录foo中启动的,然后在foo中,有一个名为webroot的目录.Vagrant自动共享foo目录.设置apache服务器以运行,以便webroot是基本http目录.这一切都很好,我能够提供基本的HTML,PHP和MySQL连接测试没问题.

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

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

由于chmod + a在我正在使用的流浪盒中不受支持,我选择通过在app_dev中取消注释umask(0000)来设置权限.假设这是一个权限问题,我尝试使用chmod来调整流浪者环境和osx内的权限,以便将所有权限调整到777.

奇怪的是,当我在流浪者环境中chmod一个文件或目录时,它声称正确设置了777但是当我ls -l时,权限没有改变.但是,当我从OUTSIDE chmod webroot文件夹中的vagrant环境chmod文件或目录时,权限仍然存在.由于symfony在环境中没有r/w权限,因此无法创建必要的缓存和日志文件.当我从osx的命令运行symfony时,一切正常.

有没有人对如何更改/ webroot目录的权限有任何见解,因此流浪者环境中的事物实际上可以读取和写入它,因为chmod似乎不起作用?

Jim*_*mbo 15

更新截至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"]
Run Code Online (Sandbox Code Playgroud)

这告诉Vagrant同步var/logs和var/cache(不要与/ var /混淆,这些是在根Symfony目录中)并让它们归vagrant:www-data所有.这与做一个相同sudo chown vagrant:www-data var/,除了Vagrant现在为你做,并强制执行,而不是强制vagrant:vagrant.

注意这里没有777'黑客'.

一旦我添加了这个,我在apache日志中没有得到任何更多的权限错误,我得到了一个很好的Symfony欢迎屏幕.我希望能帮助别人!

  • 非常感谢你救了我的一天. (2认同)

小智 5

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

两种可能性:

sudo su
chmod -R 777 app/cache
Run Code Online (Sandbox Code Playgroud)

要么

sudo chown -v app/cache
sudo chmod -R 777 app/cache
Run Code Online (Sandbox Code Playgroud)

您可能需要对日志文件执行相同的操作.

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

# -*- 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
Run Code Online (Sandbox Code Playgroud)

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';\""
Run Code Online (Sandbox Code Playgroud)

  • @IsaacDiamondn感谢您的评论!也为我工作.只需注意:`:extra` param被重命名为`:mount_options`,因此该行应为`config.vm.synced_folder"www","/ var/www",:mount_options => ["dmode = 777, FMODE = 777" ]` (10认同)
  • 弄清楚了!问题是fmode和dmode设置不正确,因为vagrant文​​件夹安装在vboxsf上.我只是在我的Vagrantfile中添加了一行`config.vm.synced_folder"../gipsydanger/","/ vagrant",:extra =>'dmode = 777,fmode = 777'.不管怎么说,还是要谢谢你! (4认同)