#ruby #vagrant #vagrantfile
#ruby #бродяга #бродячий файл
Вопрос:
У меня есть Vagrantfile
, который имеет следующую полустандартную настройку:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.network :forwarded_port, guest: 80, host: 8080, auto_correct: true
config.vm.network "private_network", ip: "192.168.56.40"
config.vm.hostname = "development.local"
config.vm.boot_timeout = 600
config.vm.provider "virtualbox" do |v|
v.name = "development.local"
v.memory = "1024"
v.check_guest_additions = true
end
config.vm.provision :shell, path: "bootstrap.sh"
end
Моя цель — автоматически включать файлы в папку , в которой настроен сайт vagrant up
.
Для настроек apache мне удалось создать хороший скрипт bash, который анализирует папку и настраивает sites-enabled
все конфигурации в папке.
Я хотел бы также поделиться этими папками внутри Vagrantfile
без необходимости изменять ядро, подобно тому, как apache анализирует sites-enabled
папку. Это означало бы, что я могу легко поделиться этим полем с другими, без необходимости менять Vagrantfile
его каждый раз, когда я запускаю тестовую среду и хочу поделиться новой папкой.
Обычный синтаксис таков:
config.vm.synced_folder "../some-folder/", "/var/www/some-folder", owner: "www-data"
Используя псевдокод, это то, к чему я стремлюсь:
foreach([$files_in_$folder] as $synced_folder) {
require $synced_folder_config_file;
// ^ this would be a small config file
}
Обратите внимание, что преимущество небольшого конфигурационного файла заключается в том, что другие параметры могут быть указаны для каждого файла (например, разные владельцы / разрешения и т.д.).
Ключевые вещи, которые нужно сделать:
- проанализировать содержимое папки
- убедитесь, что эта конфигурация выполняется как часть
vagrant up
Я едва прикасался к ruby, так что прошу прощения, если это очевидно.
Спасибо
Ответ №1:
После некоторых исследований и множества повторений и up / down / destroy:
Создайте соответствующие файлы в /synced-folders/
, каждый из которых состоит из чего -то вроде:
config.vm.synced_folder "../development.local/", "/var/www/development.local", owner: "www-data"
Затем, в вашем Vagrantfile
:
Dir[File.dirname(__FILE__) '/synced-folders/*.rb'].each {|file| eval File.read(file) }
Это анализирует каталог и eval
удаляет их.