Laravel 4 Права на боксерскую коробку с кукольным
Я успешно использовал http://www.puphpet.com для создания бродячих + марионеточных сред для ряда проектов. Затем на этой неделе мне поручили написать прототип для проекта с использованием Laravel 4. Поскольку я не буду работать над проектом полностью, я решил, что лучше всего создать для него среду VM, чтобы следующий человек может просто клонировать для репо. Не имея большого опыта работы с Laravel 4, я получил все, чтобы работать в среде Dev просто отлично. Затем я попытался выполнить первую миграцию, и здесь проблемы начинаются с разрешений файла app/storage
.
1. приложение/хранилище должно быть доступно для записи веб-пользователем
Хорошо, вытащил id: брандмауэр из предустановленной синхронизации и установил владельца и группу в www-данные следующим образом:
config.vm.synced_folder "./www", "/var/www", owner: "www-data", group: "www-data"
2. Artisan можно запустить только изнутри бродячего ящика, чтобы иметь доступ к DB
Прекрасно, vagrant ssh
и запустите мастер из папки www.
3. приложение/хранилище и приложение/база данных должны быть доступны для записи бродячим пользователем, чтобы использовать миграции
Grrr, ok, добавил следующий ужасный фрагмент кода в бродячий файл (заметьте, сначала попытался сделать это в Puppet, и он не взял):
config.vm.provision :shell, :inline =>
"usermod -a -G www-data vagrant"
4. приложение/хранилище и приложение/база данных не могут быть записаны группой
Argh!!! Хорошо, попробуйте эту директиву 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 {}
. Кажется, что разрешения для синхронизированной папки с бродягой устанавливаются хостом, а не гостем.
Наконец, в результате вручную были изменены разрешения для папки на главной машине. Есть ли более простой способ сделать это? Я бы просто хотел, чтобы у вас появилась следующая среда, свободная от беспокойства, которую они могут клонировать из репо, а не повторять настройку после клонирования.
UPDATE
Мы выяснили, что если мы изменим пользователя запуска Apache, бродяга не переопределит его при перезагрузке. Таким образом, мы сделали это вручную, и он работает лучше, чем изменение разрешенных прав доступа и владельца. Теперь мы просто пытаемся выяснить, как сделать это изменение вручную в Puppet.
Ответы
Ответ 1
После некоторого обсуждения в Twitter выяснилось следующее:
Существует ограничение от VirtualBox на бродяге, которое не позволяет вам устанавливать разрешения для синхронизированной папки из гостевой ОС. См. эту проблему в github.
Вы можете использовать следующий код для установить разрешения для синхронизированной папки из бродячего файла:
config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777","fmode=666"]
Или вы можете изменить пользователя времени выполнения Apache, чтобы он выглядел так же, как марионетка:
exec { "change_httpd_user":
command => "sed -i 's/www-data/vagrant/g' /etc/apache2/envvars",
onlyif => "/bin/grep -q 'www-data' '/etc/apache2/envvars'",
notify => Service['apache2'],
require => Package['apache2'],
}
file { "/var/lock/apache2":
ensure => "directory",
owner => "vagrant",
group => "vagrant",
require => Exec['change_httpd_user'],
}
Или любая комбинация вышеперечисленных
Ответ 2
Я не использую pupphet в моей настройке, и я придумал 2 решения:
(1) В моем файле bootstrap.sh:
sudo sed -i 's/APACHE_RUN_USER=.*/APACHE_RUN_USER=vagrant/g' /etc/apache2/envvars
sudo sed -i 's/APACHE_RUN_GROUP=.*/APACHE_RUN_GROUP=www-data/g' /etc/apache2/envvars
(2) Im my VagrantFile:
config.vm.synced_folder "./", "/vagrant", id: "vagrant-root" , :owner => "vagrant", :group => "www-data"
config.vm.synced_folder "./app/storage", "/vagrant/app/storage", id: "vagrant-storage",
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
config.vm.synced_folder "./public", "/vagrant/public", id: "vagrant-public",
:owner => "vagrant",
:group => "www-data",
:mount_options => ["dmode=775","fmode=664"]
Ответ 3
Взгляните на этот раздел документации Vagrant http://docs.vagrantup.com/v2/synced-folders/basic_usage.html