Рейк-стратегия, внедрение DotNet

Когда в прошлом году читал о Rails и играл с ним, одним из инструментов, который произвел на меня наибольшее впечатление, был Rake. Система управления версиями базы данных, которая поддерживает одинаковую интегрированную базу данных разработчика в сборку... что-то вроде этого сделало бы жизнь намного проще (и безопаснее)!

Однако одна вещь, которую я не смог выяснить: как перенести эти изменения на рабочие серверы, когда у вас фактически нет доступа к рабочим серверам? У нас есть несколько серверов по всей стране, где приложение установлено / обновлено с помощью пакета установки.

Примечание. Этот вопрос больше относится к стратегии, чем к технологиям Rails/Rake. Мы не используем рельсы, мы используем.Net. Но если я смогу разобраться в этом сценарии публикации, то, похоже, есть несколько инструментов Migratordotnet, которые могут позволить нам сделать нечто подобное.

2 ответа

Решение

Как вы, вероятно, знаете, стандартным способом Rails для запуска миграций в рабочей среде является Capistrano. У него есть задача deploy: migrations, которая запускает миграции на удаленных серверах с использованием ssh.

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

Лучшим вариантом может быть написание пользовательской задачи Capistrano для загрузки файла setup.exe, его запуска, а затем запуска миграции (возможно, с использованием Migrator.NET).

Возможно, вы сможете использовать что-то вроде SQL Compare в Red Gate для создания сценариев diff схемы, которые позволят вам автоматизировать процесс обновления базы данных. Я использовал инструмент вручную для внесения таких изменений и мог легко увидеть создание программы, которая будет запускать эти обновления как часть процесса обновления. Если бы я собирался автоматизировать его, я бы спроектировал что-то, что позволило бы мне проверить, какая версия схемы была на месте, и запустить необходимые сценарии в правильном порядке, чтобы вызвать нужную версию.

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