Как настроить среду разработки для переноса кода на живой веб-сайт?


В прошлом я всегда редактировал все мои сайты в прямом эфире; не слишком беспокоился о том, что мои 2 посетителя увидят сообщение об ошибке.

Тем не менее, может наступить день, когда я получу более 2 посетителей. Каков был бы наилучший подход к тестированию моих изменений, а затем заставить все изменения жить одновременно?

Должен ли я скопировать и вставить каждый отдельный файл в подпапку и отредактировать их, а затем скопировать их обратно, когда я закончу? Что делать, если в моем коде есть полные URL-адреса (они сломаются, если я их перемещу)? Может быть, я могу использовать некоторые .хакерство htaccess, чтобы обойти это? А как насчет фиктивных тестовых данных базы данных? Должен ли я обмануть все мои таблицы MySQL и ссылаться на них вместо этого?

Я использую CakePHP для конкретного проекта, о котором я беспокоюсь, но мне любопытно знать, какие подходы люди принимают как с Cake (какие могут иметь инструменты, чтобы помочь в этом?), причем без рамок.


Я получаю много рекомендаций для SVN, что звучит здорово, но к сожалению мой хост не поддерживает его :

5 5

5 ответов:

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

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

Я бы рекомендовал поставить код вашего сайта под полный контроль версий (git или subversion). Тестируйте и поддерживайте исходный код на отдельном, частном сервере песочницы, и просто проверьте последнюю стабильную версию на рабочем сайте, когда она будет готова к выпуску.

Для поддержки баз данных, даже для небольших проектов я поддерживаю отдельные базы данных разработки и производства. Вы можете версировать SQL, используемый для создания и поддержки вашей схемы и тестирования или загрузки данных вместе с остальная часть вашего сайта. Управляйте средой баз данных, используемой вашим сайтом, из легко отделяемого файла конфигурации и попросите ваше решение управления версиями игнорировать его.

Абсолютные URL-адреса будут проблемой. Если вы не можете избежать их, вы всегда можете сохранить имя хоста в том же файле конфигурации и прочитать его по мере необходимости... за исключением таблиц стилей и ресурсов Javascript, конечно. Моим вторым выбором для этой проблемы была бы магия перезаписи URL-адресов или ее эквивалент в сервер разработки, и мой последний выбор был бы просто возиться с файлом /etc/hosts, когда я хотел проверить функции, которые зависят от них.

Я настроил на своем ноутбуке сервер разработки, который максимально точно дублирует мой веб-сервер (серверное программное обеспечение и конфигурация, операционная система, макет файловой системы, установленное программное обеспечение и т. д.) Таким образом, я могу написать код на своем ноутбуке и протестировать его локально; как только я заработаю там, я скопирую его на сервер. Иногда некоторые проблемы возникают из-за незначительных различий между двумя компьютерами, но они всегда быстро решаются (и на всякий случай у меня есть свой сайт в репозитории SVN, так что я всегда могу вернуть его).

На другом веб-сайте, который я поддерживал, я использовал немного другую тактику: я назначил путь URL внутри сайта, который будет версией разработки базового сайта. То есть, http://www.example.com/devweb обычно зеркально http://www.example.com, http://www.example.com/devweb/foo/bar.php отразил бы http://www.example.com/foo/bar.php и т. д. Я создал папку devweb в корневом каталоге документа, но вместо копирования всех файлов я настроил сервер так, что если бы запрошенный файл не существовал в каталоге /devweb, он бы поищите его в корне документа. Однако это была более хрупкая установка, чем наличие отдельного сервера разработки.

У меня есть несколько сайтов, написанных на CakePHP. Я разрабатываю и тестирую на своей локальной машине, используя базу данных на моем рабочем сервере (у меня просто есть логин MySQL, который работает для моего статического IP-адреса).

Весь код проверяется в Subversion, и тогда у меня есть сервер непрерывной интеграции-Hudson:

Https://hudson.dev.java.net/

Это создает и развертывает мой проект на производственной машине. Он просто проверяет код в subversion для конкретного проекта затем запускается простой скрипт для SSH / копирования файлов в промежуточное или производственное расположение на сервере. Вы можете либо настроить этот процесс вручную (что я уже сделал), либо настроить его так, чтобы он развертывался после того, как код был зарегистрирован. Есть много других инструментов CI, которые можно настроить для этого (Посмотрите также на Xinc).

Http://code.google.com/p/xinc/

Что касается абсолютных URL-адресов, вы всегда можете настроить что-то в своем файле хоста для разрешения сайта вместо этого локально на вашем компьютере. Это работает для меня, просто не забудьте вынуть его потом:)

Надеюсь, это поможет...

У меня есть версия config/database.php, который использует переменную php server "имя сервера", чтобы определить, на какой системе работает приложение. Затем, когда я клонирую свой РЕПО git через мою домашнюю систему, сайт разработки (который имеет те же спецификации, что и живая машина) и живая машина, все они подключаются к своим соответствующим базам данных.

Я вставил сюда, но я также считаю, что его можно найти на thebakery.

Http://pastebin.com/f1a701145