#symfony #vagrant
#symfony #vagrant
Вопрос:
Я настроил окно Vagrant, которое запускает мой веб-сервер для размещения моего приложения Symfony2. Все работает нормально, кроме синхронизации папок.
Я попробовал 2 вещи:
- config.vm.synced_folder ЛОКАЛЬНАЯ ПАПКА, ПАПКА ХОСТА
- config.vm.synced_folder ЛОКАЛЬНАЯ ПАПКА, ПАПКА ХОСТА, тип=»rsync»
Вариант 1: первый вариант работает, я на самом деле не знаю, как используется общий доступ к файлам, но он работает. Файлы копируются в обоих направлениях, но приложение работает ОЧЕНЬ медленно. Symfony генерирует файлы кэша, которые могут быть проблемой, но я действительно не знаю, как устранить это и посмотреть, что происходит.
Вариант 2: синхронизация выполняется только одним способом (с моего локального компьютера на vagrant box), который охватывает большую часть дела и выполняется быстро. Проблема в том, что когда я использую командную строку symfony в окне vagrant для создания некоторых файлов, они не копируются на мой локальный компьютер.
Мой вопрос: каков наилучший способ продолжить синхронизацию 2 способами? С опцией 1, как я могу (поскольку это может быть проблемой) исключить некоторые файлы из синхронизации. С помощью опции 2 как я могу убедиться, что изменения на удаленном компьютере копируются на мой локальный компьютер?
Ответ №1:
Если стратегия синхронизации папок по умолчанию (я полагаю, общие папки VirtualBox) является медленной для вашего варианта использования, вы можете выбрать другую и, при необходимости, поддерживать двустороннюю синхронизацию:
- Если вашей основной операционной системой является Linux или Mac OS X, вы можете использовать NFS.
- Если ваша хост-ОС Windows, вы можете вместо этого выбрать SMB.
Rsync работает очень быстро, но, как вы указали, работает только в одну сторону.
Комментарии:
1. Вы правы, но в моем случае требуется скорость, NFS и SMB не соответствуют моим потребностям…
2. @Emyl, есть ли у вас опыт использования как NFS, так и SMB. Как SMB сравнивается с NFS с точки зрения скорости синхронизации.
Ответ №2:
Поскольку, похоже, Vagrant не предлагает «встроенный» способ сделать это, вот что я сделал:
- Настройте папку Vagrant RSYNC в папках, которые будут содержать файлы, созданные приложением (в Symfony2 это ваша папка Bundle / Entity). Обратите внимание, что я не синхронизировал корневую папку, потому что некоторые папки не должны быть синхронизированы повторно (кэш / журналы …), А также потому, что процессу rsync потребовалось слишком много времени для анализа всех папок / вложенных папок, когда я знаю, что будет сгенерирована только папка объектов. Поскольку Rsync должен выполняться из Vagrant box на хост, я использую плагин vagrant-rsync-back и, таким образом, запускаю это вручную каждый раз, когда использую команду, которая генерирует код. https://github.com/smerrill/vagrant-rsync-back#getting-started
- Создайте на моем локальном компьютере наблюдателя, который будет отслеживать любые изменения в коде и повторно синхронизировать его с полем vagrant. https://gist.github.com/laurentlemaire/e423b4994c7452cddbd2
Комментарии:
1. Vagrant имеет встроенную поддержку NFS и SMB в качестве альтернативы двусторонней синхронизации. Смотрите мой ответ выше.
Ответ №3:
Vagrant монтирует корень вашего проекта как /vargrant
папку внутри коробки как 2-полосный общий ресурс.
Вы можете запустить свою команду там, чтобы синхронизировать необходимые файлы. Любой ввод-вывод будет чертовски медленным (как вы уже упоминали), однако вы получите свои файлы. Для других целей используйте свою 1-стороннюю синхронизированную папку.
Комментарии:
1. Мое приложение не находится в этой папке, иначе, как вы упомянули, оно было бы чертовски медленным. И копирование файлов, которые необходимо переместить туда, также потребует слишком много работы и замедлит ее…
2. Vagrant монтирует эту папку для своих собственных целей. Даже если вы не просите его об этом.
3. Спасибо за ваши ответы, но все же это делает процесс слишком медленным или сложным (если я создам другой скрипт, который перемещает вновь созданные файлы, исключая кеш / журналы …)
4. Я лично отключаю синхронизацию (в Windows) и полагаюсь на функцию автоматической загрузки IDE. Также я запускаю команды ТОЛЬКО внутри коробки. Для некоторых из них требуется вручную загружать файлы из коробки, однако вы можете видеть журналы внутри коробки просто отлично.
5. Я согласен с вами, все задачи должны выполняться в bow, иначе вы потеряете преимущество централизации ящиков с помощью Vagrant. Тем не менее, в моем случае (Symfony framework) код генерируется с использованием определенных команд, и эти сгенерированные классы часто требуют, чтобы вы работали с ними после создания, поэтому вам нужно, чтобы они были доступны в вашей IDE (локальной). Смотрите ниже, как я справляюсь с этим.