我一直成功地使用http://www.puphpet.com来生成vagrant+puppet环境用于多个项目。然后这个星期,我被要求使用Laravel 4为一个项目编写原型。由于我不会全职工作于该项目,我认为最好为它创建一个VM环境,以便下一个人可以克隆该环境进行开发。虽然我没有太多Laravel 4的经验,但在dev环境中一切都运行良好。然后我尝试运行第一个迁移,并且遇到了与app/storage
文件权限相关的问题。
1. app/storage必须由Web用户具有可写权限
没问题,我从同步文件夹配置中删除了id:vagrant,并将所有者和组设置为www-data,如下所示:
config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
2. 为了访问数据库,Artisan 只能从 Vagrant box 内部运行
好的,使用 vagrant ssh
进入 www 文件夹并运行 Artisan。
3. 为了使用迁移,必须让 vagrant 用户对 app/storage 和 app/database 具有可写权限
好的,很烦人,现在我要将下面这段可怕的代码添加到 Vagrant 文件中(注意,我先尝试了 Puppet,但没有成功):
config.vm.provision :shell, :inline =>
"usermod -a -G www-data vagrant"
4. app/storage & app/database 组没有写入权限
哎呀!好的,让我们尝试这个 Puppet 指令:
file { "/var/www/app/storage":
source => "/var/www/app/storage/",
mode => 0775,
ensure => 'directory',
owner => 'www-data',
group => 'www-data',
recurse => true
}
不行,无效。尝试使用Puppet的exec {}
指令做同样的事情,但没有任何效果。看来vagrant同步文件夹的权限由主机而非客户机设置。
最终,我手动更改了主机上文件夹的权限。有没有更简单的方法?我只想为下一个开发人员提供一个无忧的环境,他们可以从版本库中克隆出来,而不必在克隆后重新设置一切。
更新
我们已经发现,如果更改Apache运行用户,则vagrant不会在重新加载时覆盖它。因此,我们手动进行了更改,并且比更改同步文件夹的权限和所有者效果更好。现在,我们正在尝试找出如何在Puppet中手动进行这种更改。
sudo nano /etc/mysql/my.cnf ;skip-external-locking ;bind-address
保存并重新加载。希望这可以帮助你! - dpluscc