Моя компания разработала CMS, но теперь мы используем ее некоторое время, когда сталкиваемся с проблемой: все изменения напрямую связаны с живой средой. Если вы хотите сделать капитальный ремонт сайта, вам иногда нужно сначала выполнить всю работу, а затем сразу опубликовать все изменения на работающем сайте.
Я сейчас говорю о контенте, а не о среде разработки / тестирования / подготовки / производства для разработки программного обеспечения
Я видел несколько вариантов решения проблемы, но ни один не может полностью решить эту проблему:
- Использовать управление версиями: версия x запущена в производстве, y находится в стадии подготовки;
- Использовать флаг черновика / публикации: весь черновой контент хранится на удаленном сайте;
- Используйте две базы данных: одну для промежуточной среды, другую для живого.
У всех них есть проблемы:
- Управление версиями проблематично для вновь создаваемых страниц (версия нулевая на производстве?) И изменений в карте сайта (для этого мы используем вложенный набор);
- Для черновиков невозможно создать вторую версию уже опубликованной страницы;
- Со второй базой данных вы должны копировать / синхронизировать все данные, которые вы не хотите различать между двумя местами: пользователи, группы пользователей, разрешения и т. Д.
Есть ли другие варианты? Желательно, чтобы вы делали это с помощью рычага пользователя, чтобы пользователь A мог начать капитальный ремонт, а пользователь B по-прежнему мог публиковать новый контент. Но, возможно, сейчас это слишком сложно, и сейчас нам нужно решить только первую проблему.
PS. Это php, ZF-приложение с бэкэндом MySQL, но это не должно иметь значения для архитектуры.