Можно ли вкладывать синхронизированные папки в бродягу?

Я разрабатываю различные пакеты PHP в глобальной/общей папке и связываю их с различными настройками разработки, что отлично работает с базовой настройкой локального хоста.

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

Мне посоветовали использовать синхронизированные папки, чтобы обойти это, но, хотя Vagrant говорит мне, что монтирует папки, когда я вхожу по ssh, они пусты.

Чтобы проиллюстрировать, это моя установка:

Глобальный репозиторий пакетов (ссылка на все среды разработки):

+- shared_drive
    +- packages
        +- PackageFoo
        +- PackageBar
        +- PackageBaz

Локальный хост (который работает):

+- work_drive
    +- project
        +- vendor
            +- davestewart
                +- PackageFoo     <= symlink to /shared_drive/packages/PackageFoo

ВМ (которая не работает):

+- vagrant
    +- project                    <= mapped to /work_drive/project
        +- vendor
            +- davestewart
                +- PackageFoo     <= mapped to /shared_drive/packages/PackageFoo

Пути правильные, везде могу cd.

Я пробовал разные типы синхронизации (по умолчанию, nfs, rsync).

Итак, что бы я ни делал, ls в Vagrant показывает, что vendor/davestewart/ пусто.

Это вообще правильный подход? Все, что я хочу сделать, это редактировать и тестировать исходные файлы пакетов во всех средах разработки, которые я настроил.

OS X / Yosemite VirtualBox 5.1


person Dave Stewart    schedule 22.09.2016    source источник


Ответы (1)


Вместо любых ответов мне удалось решить проблему, перевернув ее с ног на голову.

Вместо того, чтобы пытаться уговорить Vagrant следовать внешней символической ссылке (которая, по словам самих документов, несовместима на разных платформах), я:

  • Установите исходную внешнюю символическую ссылку /shared_drive/packages/... в качестве синхронизируемой папки Vagrant.
  • Внутренне создал символическую ссылку исходного кода /project/vendor/... на эту папку.

Еще визуально:

+- vagrant
    +- shared
    |   +- packages               <= synced (external) folder to /shared_drive/packages/
    |       +- PackageFoo
    |       +- PackageBar
    |       +- PackageBaz
    |
    +- project
        +- vendor
            +- davestewart
                +- PackageFoo     <= symlink (internal) to /shared/packages/PackageFoo/

Абсолютно легко настроить, это быстро, PHP доволен и должен работать во всех ОС :)

person Dave Stewart    schedule 22.09.2016
comment
Я понимаю, что это очень старый вопрос, но мне интересно, что происходит в хост-системе, когда вы создаете символическую ссылку на гостевой машине? или вы в основном игнорируете это локально? - person ProLoser; 08.11.2018