#umbraco
#umbraco
Вопрос:
Я нахожусь в ситуации, когда мне было поручено создать приложение или расширение для Umbraco, которое позволяет внутренним пользователям выполнять перенос своих изменений с сайта разработки на живой сайт. Предполагается, что эта миграция должна происходить один раз в день или когда серверные пользователи нажимают кнопку в серверной части.
Я знаю, что Umbraco предлагает это в пакете Courier, но, по-видимому, это работает недостаточно хорошо для этого случая.
Еще несколько деталей:
Разработка и действующий сайт находятся на одном сервере, как и их базы данных. Данные просто нужно будет перенести из одной папки в другую и проделать то же самое с таблицами в базе данных.
Как я вижу, для этого есть два способа.
1) Вы выполняете полную миграцию, где вы в основном выполняете демонтаж действующей базы данных и обновляете ее до новой версии. Затем вы также копируете все необходимые файлы.
2) Вы создаете пакет, содержащий типы документов и так далее, Которые вы изменили на своем сайте разработчика, и загружаете этот пакет на действующий сайт.
Проблема с номером 1 заключается в том, что, похоже, вам придется повторно опубликовать весь сайт после переноса. Насколько я понял, вы можете сделать это с помощью веб-сервиса, но я бы предпочел, чтобы вместо этого я мог использовать консольное приложение.
Мой вопрос тогда:
Есть ли способ создавать пакеты программно и загружать их таким же образом или каков наилучший способ осуществить эту миграцию программно?
Любые предложения были бы высоко оценены, поскольку я в некотором роде не знаю, как это сделать 🙂
Редактировать
В итоге я фактически выполнил полное зеркальное отображение в том смысле, что использовал Robocopy для переноса всех файлов, которые были изменены в папках, а затем я сделал резервную копию сайта разработки с помощью команды SQL, а затем я восстановил его в живой базе данных с помощью команды RESTORE SQL.
Необходимо выполнить несколько настроек в командах SQL, но это выполняется гладко, и полная передача занимает до 10 секунд в зависимости от количества файлов, которые были изменены.
И последнее. Если вы хотите, чтобы изменения были видны, вам необходимо перезагрузить Umbraco. Это можно сделать, изменив файл web.config либо вручную, либо программно установив для него значение LastWriteTime.
Ответ №1:
Вы всегда можете создать usercontrol, который будет обрабатывать повторную публикацию всего сайта для вас, вы можете вызвать его из своего консольного приложения.
Вы также можете присоединиться к бета-версии программы Courier 2, которая действительно достаточно хороша (во всяком случае, что касается функций, я сам ее не тестировал).
Другим способом может быть предоставление всех узлов в виде XML-канала и использование функции планирования CMSImport для автоматической миграции узлов.
Это сложная задача, есть много вариантов, но пока нет «серебряной пули». Я возлагаю большие надежды на то, что Courier 2 идеально подойдет для этого, и с нетерпением жду его выхода.
Комментарии:
1. Но как бы вы справились с миграцией узлов в базе данных? Просто, если другие смотрят на ответ, вам нужно будет отслеживать идентификаторы новых страниц, чтобы случайно не опубликовать страницы, которые вы на самом деле не хотите публиковать, если таковые существуют.
2. Вы начинаете с двух идентичных баз данных. Затем, когда вы поместите 1 из них в живую среду, повторно заполните все таблицы, которые изменятся (извините, не знаю, какие из них изменятся), чтобы начать с действительно высокого начального значения. Затем существующий контент может быть перезаписан (с тем же идентификатором), новый контент из исходной базы данных может быть скопирован без вмешательства в существующий контент.
3. К вашему сведению: я искал серебряную пулю, и это все, что у меня есть, просто очень, очень сложно сделать это в Umbraco, и я не знаю многих людей, у которых есть успешная автоматизированная стратегия. Предполагается, что Courier 2 сделает все это действительно очень простым.
4. Давайте помолимся, чтобы это избавило нас от наших проблем, хе-хе. В любом случае спасибо за ваш ответ, я буду считать это правильным ответом на мой вопрос и отмечу его как принятый 🙂