Развертывание Сложных Изменений


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

Author: Justin Scott, 2010-07-08

3 answers

Короткий ответ: это боль в шее!

Мне приходилось делать это несколько раз (и каждый раз мне хочется больше думать о своем дизайне в следующем проекте, который я делаю). Что я делаю, так это передаю базу кода в раздел разработки (или папку, или сервер и т. Д.), Чтобы я мог работать над ней отдельно, чтобы убедиться, что все ошибки устранены, прежде чем переходить к развертыванию. Затем я создаю SQL-скрипт, который всегда содержит одни и те же первые две строки:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Это гарантирует, что сценарий помещает все в совершенно свежую и пустую базу данных. Остальная часть скрипта воссоздаст все таблицы, которые я повторно использую, из старой базы данных в новую. Затем я создам новые (или измененные) таблицы в новой базе данных. Наконец, я перенесу все данные с живого сервера на сервер разработки. Это может занять много времени в зависимости от того, сколько данных вы перемещаете и как быстро вы можете их перемещать, поэтому я рекомендую вам тщательно продумать сценарий, потому что чем меньше вы вынуждены его запускать, тем лучше.

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

Вот как я это делаю, и хотя это больно, это действительно работает. Если есть лучший кстати, я был бы рад послушать.

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

mysqldump --databases --no-data databaseName > newScript.sql

Затем я изменю этот сценарий, как описано выше.

 3
Author: Mike, 2010-07-08 22:45:40

Чтобы получить "возможность отката", я действительно предлагаю познакомиться (хорошо) либо git, либо mercurial ( распределенные системы управления версиями).

Дни, когда вы должны работать со своим исходным кодом в плоских файлах, прошли (теперь вы должны работать с ним в плоских файлах, но иметь действительно надежную систему контроля изменений, отслеживающую их).

 2
Author: Kzqai, 2010-07-08 21:09:14

Я обычно делаю (для сайтов в стиле ЛАМПЫ):

  1. определите свои изменения , затем напишите сценарий для их применения (я использую файл Makefile).
  2. Проверьте ваши изменения на выборке данных, которая представляет реальную среду
  3. Проверьте еще раз, чтобы убедиться
  4. Дайте себе выход, имейте возможность отката

Если вы используете кластер, то у вас могут возникнуть большие проблемы с состоянием сайта, кэшами и так далее.

 0
Author: Aiden Bell, 2010-07-08 20:50:27