Symfony2 + Композитор (несколько доменов)


В настоящее время мы переносим наш проект на symfony2. Веб-сайт использует несколько доменов:

  • domain.com - основной веб-сайт
  • help.domain.com - часто задаваемые вопросы
  • profile.domain.com - для пользовательского CP

И так далее

Чтобы это сработало, моя идея состоит в том, чтобы создать каталог "сайты" и для каждого поддомена создать свой собственный каталог, в котором есть файлы фреймворка + каталог поставщика с символическими ссылками на каталоги в корневом поставщике/* (каждый каталог, кроме composer и autoload.php файл). Так что структура выглядит примерно так:

root/
    sites/
        domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
        profile.domain.com/
            app/
            src/
            web/
            vendor/
                symlinks for each library to root vendor
            composer.json
            composer.lock
    vendor/

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

Проблема в том, что теперь мне нужно сделать "composer install" в каждом каталоге, и он создает свой собственный composer.lock, и если я позже обновлю любой из каталогов, библиотеки будут обновлены, но файлы composer.lock не будут синхронизируется, поэтому он будет просто переустанавливать его каждый раз.

Есть ли лучший способ решить эту проблему? (Я думал о том, чтобы поместить композитора только в корневую директорию, но я не нашел способа сбросить разные autoload.php файлы для каждого домена).

Author: Elnur Abdurrakhimov, 2012-08-30

1 answers

У вас либо один проект с одним набором зависимостей, либо два проекта с отдельными deps. Все, что находится между ними, не имеет смысла. Похоже, вы хотите выбрать первый вариант, но у вас есть опасения по поводу производительности автоматической загрузки.

Дело в том, что по умолчанию загрузка в любом случае будет медленной. Таким образом, даже если бы у вас было два отдельных файла автоматической загрузки, включающих только dep конкретного подпроекта, это, вероятно, все равно было бы довольно медленно.

Что вам действительно следует сделать, так это дамп карты классов, которая в основном представляет собой файл автоматической загрузки, который сопоставляет все имена классов с файлами, в которых они находятся. Это снижает количество вызовов статистики и, таким образом, очень эффективно. И загрузка всей карты классов в обоих подпроектах также не должна давать вам слишком больших накладных расходов, особенно если у вас включен APC.

Вы можете создать файл карты классов с помощью следующей команды:

$ composer dump-autoload --optimize

Теперь вы должны повысить производительность автоматической загрузки.

TLDR: Используйте один composer.json с картой классов автоматическая загрузка, это быстро.

 3
Author: igorw, 2013-02-22 13:47:21