У Jas Panesar лучший ответ, если вы спрашиваете об этом с точки зрения разработки, конечно. То есть, если вы просто спрашиваете, как легко сохранить ваши новые разработки отдельно от сайта, который уже запущен. Однако, если ваш вопрос на самом деле спрашивал, как запустить обе версии одновременно, то вот мои два цента.
Ваша настройка во многом связана с этим, но я всегда рекомендую сначала запускать веб-серверы на основе процессов. То есть не использовать многопоточные серверы (менее подходящие для этого вопроса) и не встраивать в веб-сервер (то есть не использовать mod_python, который является важной частью здесь). Итак, у вас есть один или несколько процессов, получающих HTTP-запросы от вашего веб-сервера (Apache, Nginx, Lighttpd и т. Д.). Теперь, когда вы хотите попробовать что-то вживую, не влияя на ваш обычный работающий сайт, вы можете запустить процесс, обслуживающий запросы, которые никогда не получают обычные запросы на него, как другие. То есть обычные пользователи этого не видят.
Вы можете настроить поддомен, который указывает на этот домен, и вы можете установить промежуточное ПО, которое перенаправляет «специального» пользователя на бета-версию. Это позволяет вам развертывать новые функции для одних пользователей, но не для других.
Теперь самые большие проблемы связаны с изменениями базы данных. Миграция схемы - это большое дело, на которое большинство из нас никогда не обращают внимания. Я думаю, что параллельный запуск - это хорошо, потому что он заставляет вас правильно выполнять миграцию схемы. То есть вы не можете просто выключить все и выполнить длительные изменения схемы, прежде чем снова ее восстанавливать. Вы никогда бы не увидели, чтобы какой-нибудь важный сайт делал это.
Ключ - это маленькие шаги. У вас всегда должны быть две версии кода, способные обращаться к одной и той же базе данных, поэтому изменения, которые вы вносите в новый код, не должны нарушать старый код. Это разбито на несколько шагов, которые вы всегда можете сделать:
- Вы можете добавить столбец со значением по умолчанию или это необязательно. Новый код может использовать его, а старый код может игнорировать его.
- Вы можете обновить живую версию с помощью кода, который знает, что нужно использовать новый столбец, после чего вы можете сделать его обязательным.
- Вы можете заставить новую версию игнорировать столбец, а когда она станет основной, вы можете удалить этот столбец.
Вы можете сделать эти маленькие шаги для перехода между любыми схемами. Вы можете итеративно добавить новый столбец, который заменит старый, развернуть новый код и удалить старый, без прерывания обслуживания.
Тем не менее, это ваше первое веб-приложение? Вы можете, вероятно, сломать это. Вероятно, у вас мало пользователей :-) Но это здорово, что вы даже задаете этот вопрос. Многие «профессионалы» справедливо об этом спрашивают, и даже тогда меньшее количество отвечает на них.