Развертывание Сложных Изменений
Иногда нам приходится вносить довольно сложные изменения на веб-сайт, которые требуют внесения изменений в базы данных (новые или измененные таблицы) и динамический исходный код (например, PHP или ColdFusion). Каков наилучший способ быстро упаковать и развернуть эти изменения, не нарушая все на живом веб-сайте?
3 answers
Короткий ответ: это боль в шее!
Мне приходилось делать это несколько раз (и каждый раз мне хочется больше думать о своем дизайне в следующем проекте, который я делаю). Что я делаю, так это передаю базу кода в раздел разработки (или папку, или сервер и т. Д.), Чтобы я мог работать над ней отдельно, чтобы убедиться, что все ошибки устранены, прежде чем переходить к развертыванию. Затем я создаю SQL-скрипт, который всегда содержит одни и те же первые две строки:
DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;
Это гарантирует, что сценарий помещает все в совершенно свежую и пустую базу данных. Остальная часть скрипта воссоздаст все таблицы, которые я повторно использую, из старой базы данных в новую. Затем я создам новые (или измененные) таблицы в новой базе данных. Наконец, я перенесу все данные с живого сервера на сервер разработки. Это может занять много времени в зависимости от того, сколько данных вы перемещаете и как быстро вы можете их перемещать, поэтому я рекомендую вам тщательно продумать сценарий, потому что чем меньше вы вынуждены его запускать, тем лучше.
После того, как я запустил и запустил новую базу данных разработки, остальное - создать новый код для ее использования. Как только это будет хэшировано, развертывание должно быть относительно легким (хотя, возможно, и трудоемким). Просто используйте тот же сценарий, чтобы скопировать все новые текущие данные в новую базу данных на сервере развертывания, и скопируйте туда весь новый код, и все готово!
Вот как я это делаю, и хотя это больно, это действительно работает. Если есть лучший кстати, я был бы рад послушать.
Обновление: В ответ на комментарий Чальвака, да, я обычно использую следующее, чтобы получить все определения таблиц без их фактических данных:
mysqldump --databases --no-data databaseName > newScript.sql
Затем я изменю этот сценарий, как описано выше.
Чтобы получить "возможность отката", я действительно предлагаю познакомиться (хорошо) либо git, либо mercurial ( распределенные системы управления версиями).
Дни, когда вы должны работать со своим исходным кодом в плоских файлах, прошли (теперь вы должны работать с ним в плоских файлах, но иметь действительно надежную систему контроля изменений, отслеживающую их).
Я обычно делаю (для сайтов в стиле ЛАМПЫ):
- определите свои изменения , затем напишите сценарий для их применения (я использую файл Makefile).
- Проверьте ваши изменения на выборке данных, которая представляет реальную среду
- Проверьте еще раз, чтобы убедиться
- Дайте себе выход, имейте возможность отката
Если вы используете кластер, то у вас могут возникнуть большие проблемы с состоянием сайта, кэшами и так далее.