Назад | Перейти на главную страницу

Предварительно заполнить содержимое синхронизированной папки бродяг

В настоящее время я создаю довольно сложный серверный стек (приложение ruby ​​on rails), над которым разработчики могут работать, не устанавливая все самостоятельно. Поэтому я использую Vagrant, чтобы позволить им это делать.

Идея состоит в том, что когда вы впервые устанавливаете образ, он извлекает последние исходные коды и устанавливает зависимости, источники отображаются в синхронизированных папках (функция, встроенная в vagrant), так что разработчики могут фиксировать источники и редактировать их в своей собственной среде. Vagrant-box только для сервера.

Запись синхронизированной папки в Vagrantfile:

config.vm.synced_folder "gameeso/", "/var/gameeso", :create => "true" 

Образ представляет собой сервер Ubuntu со сценарием выскочки (сценарий выполняется при загрузке и только при подключении к Интернету), который:

Все это происходит в синхронизированной папке. У меня были некоторые проблемы с этим подходом, в основном из-за того, что Vagrant очищает синхронизированную папку в моей гостевой системе. Я решил эту проблему, добавив «sleep 10» в сценарий выскочки, чтобы он мог подождать, пока Vagrant не настроит синхронизируемые папки.

Конечно, это небезопасный способ сделать это (если загрузка занимает больше 10 секунд, что маловероятно в наши дни, я бы не хотел узнавать об этом;))

Мой вопрос: есть ли лучший способ разрешить гостевому хосту (бродячему изображению) заполнить синхронизированную папку?

Конечно, заранее большое спасибо!

Встроенный Vagrant обеспечение функции должны идеально подходить для этого. Есть множество способов сделать это, но самый простой, вероятно, состоит в том, чтобы взять весь свой сценарий Upstart и превратить его в простой сценарий оболочки. Затем поместите один из этих блоков в свой Vagrantfile:

  1. Использование «встроенного» скрипта. Бродяга скопирует содержимое из Vagrantfile в сценарий в /tmp каталог и запустите его.

    $script = <<<SCRIPT
    // The contents of your script go here
    SCRIPT
    
    config.vm.provision "shell", inline: $script
    

    Обратите внимание, что сценарий здесь находится внутри "heredoc", что означает, что вам нужно быть осторожным, чтобы убедиться, что SCRIPT токен, заканчивающий heredoc, находится в нужном месте - то есть в отдельной строке без лишних пробелов. (Ссылка на heredoc выше показывает способ разрешить пробелы, но вам все равно нужно быть осторожным.)

  2. Указание на файл сценария. Vagrant скопирует этот файл в /tmp каталог и запустите его.

    config.vm.provision "shell", path: "setup.sh"
    

    Обратите внимание, что путь здесь относительно Vagrantfile расположение. тем не мение, файл не выполняется из этого места, поэтому, если вам нужно, чтобы файл находился в определенном каталоге, вы должны следовать методу №3.

  3. Использование «встроенного» сценария, указывающего на файл сценария. Таким образом, вы можете выполнить сценарий в выбранном месте (в приведенном ниже примере это находится в /vagrant после того, как вы выполнили необходимые условия, такие как chmod или установка переменных окружения.

    $script = <<SCRIPT
    chmod +x /vagrant/setup.sh
    cd /vagrant
    ./setup.sh
    SCRIPT
    
    config.vm.provision "shell", inline: $script
    

Вы также можете использовать метод подготовки, который работает через «настоящую» систему развертывания и подготовки, но в зависимости от ваших требований, это может быть излишним.