Как справиться с развертыванием и обновлением нескольких установок одного веб-приложения CakePHP? - PullRequest
2 голосов
/ 17 августа 2011

Я сделал простую CMS с CakePHP для обработки небольшого (но растущего) числа веб-сайтов.CMS постоянно развивается, так как я регулярно добавляю функции в версию для разработки на своем собственном компьютере.

Я использую SVN для отслеживания эволюции этой версии для разработки, и на этом все.Чтобы создать новый веб-сайт, я в основном копирую / вставляю папку dev и изменяю необходимые файлы перед загрузкой нового веб-сайта по FTP.

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

Другая проблема заключается в том, что некоторые веб-сайты имеют измененные версии CMS из-за особых потребностей: некоторые классы контроллеров имеют специальные методы, отсутствующие на локальномверсия.

Подводя итог:

  • У меня есть одно базовое приложение CakePHP, которое постоянно развивается
  • Существует несколько версий (= веб-сайтов) этого приложения, уже установленных наразные серверы
  • Некоторые веб-сайты имеют собственный код, отсутствующий в базовой версии
  • Я хочу иметь возможность легко обновлять все настоящие и будущие веб-сайты при улучшении базового приложения, не нарушая некоторыевозможные конкретные части

Зная, что это приложение CakePHP, что бы вы сделали?Как мне изменить код, чтобы одновременно управлять ядром и конкретным кодом?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

... некоторые классы контроллеров имеют специальные методы, которых нет в локальной версии.

Вы можете также рассмотреть возможность установки дополнительных путей к классам в каждом приложении вашего веб-сайта. Вы можете указать CakePHP полностью проверить другие каталоги на наличие файлов, отсутствующих в текущем приложении. Например, вы можете иметь следующую структуру каталогов:

/app1 - a standard client's website application
/app2
/app3 - a custom client's website application (with custom controller)
/core - the core CMS application
/cake

Добавляя следующее к вашим /appN/config/bootstrap.php файлам, вы говорите CakePHP искать контроллеры в /core/controllers, если он не может найти тот, который ищет в текущем приложении.

App::build(array(
    'controllers' => array(ROOT . DS . 'core' . DS . 'controllers' . DS),
));

Это, например, позволит вам поместить все ваши контроллеры CMS в /core/controllers и удалить все ваши каталоги /appN/controllers. Только там, где клиенту нужен настроенный контроллер (т. Е. /app3 выше), вы можете создать каталог контроллеров, скопировать конкретный контроллер и внести изменения (добавив методы и т. Д.).

(Такой подход разработчик Wildflower CMS принял - обратите внимание на каталог /wildflower.)

1 голос
/ 17 августа 2011

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

Имейте в виду, я более привык к тому, как работает Git, поэтому этот сценарий может работать лучше в Git, чем в SVN, ммм.

...