Возьмите созданное приложение laravel, способ создать что-то вроде двух приложений, которые разделяют ядро?

Я создал благотворительное приложение Laravel 5.3

теперь клиент говорит мне:

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

Каков хороший способ сделать возможным обмен обновлениями между двумя приложениями без необходимости повторять все коммиты и вручную объединять коммиты в каждом подпроекте?

Я подумал, может быть, где-то у вас есть основной проект и отдельный репозиторий git, который содержит только файлы, которые вы хотите перезаписать в указанном приложении... не совсем уверен, какие инструменты использовать и т.д.

РЕДАКТИРОВАТЬ Я думал о создании из приложения A поставщика услуг, который включает в себя все приложение A, сделать его доступным через пакет composer. Теперь приложение CLONE будет использовать этот пакет поставщика услуг / композитора. Когда я делаю обновление для поставщика услуг приложения A I, просто запускаю обновление композитора в моем клонированном приложении. Проблема:что, если обновление требует миграции базы данных?

3 ответа

Решение

Хороший способ сделать это - создать два приложения Laravel и затем создать пакет Composer, содержащий все основные компоненты.

Вы можете легко ссылаться на пакеты в Composer, которые размещены в частных репозиториях, полностью минуя Packagist.

Настройка в composer.json Файл довольно прост. Файлы компоновщика приложения будут следовать такой схеме:

{
    "type": "project",
    "repositories": [
        {
            "type": "git",
            "url": "git@github.com:your/package.git"
        }
    ],
    "require": {
        "your/package": "dev-master",
        ...
    }
}

Хотя общий пакет будет следовать за этим:

{
    "name": "your/package",
    "autoload": {
        "psr-4": {
            "YourPackage\\": "src/"
        }
    }
}

Затем просто добавьте любые общие классы / помощники в your/package.git хранилище, и вы можете легко получить к ним доступ в обоих.

Вы можете использовать как git alternates, так и мелкие функции клонирования, чтобы делиться объектами между репозиториями. Это то, что GitHub делает, чтобы сэкономить место на диске, когда пользователи разрабатывают репо.

По сути, альтернативная функция дает git имя пути для поиска объектов. В то время как мелкий клон (может быть сделан локально) дает вам определенное количество истории коммитов, которое вы указываете с параметром глубины.

Удобно, git clone может настроить альтернативный путь для вас. Команда, которую вы запустите, должна выглядеть примерно так:

git clone -l -s [путь к первоначальному репо]

Обратите внимание, что я не включил параметр глубины в команду.

Вот документация для альтернатив: https://git-scm.com/docs/gitrepository-layout А вот документация для клона: https://git-scm.com/docs/git-clone

Конвертировать сайт в мультитенантность в этом случае. Это позволяет обслуживать абсолютно независимый контент при работе через один и тот же стек, от данных до уровня представления. Смотрите этот пакет:

https://github.com/HipsterJazzbo/Landlord

Это также избавит вас от головной боли при управлении независимыми миграциями, поскольку оба сайта будут использовать одну и ту же структуру БД.

Другие вопросы по тегам