Ответ 1
Наша производственная среда включает в себя следующее:
- 3 интерфейса, которые обслуживают наш веб-сайт.
- 2 базы данных (Master-Slave, репликация)
- 1, который запускает httpd и базу данных для рекламы
Наша среда разработки - это единый сервер, на котором работают как базы данных, так и httpd, с конфигурацией мы имеем разные рабочие области для каждой настройки, а наш VC - подрывная деятельность. Проведение тоже довольно просто - оно работает на одном из интерфейсов.
Изменения в базе данных
Первоначально мы потратили много времени на дизайн базы данных и, похоже, действительно окупились. Через пять месяцев мы ничего не изменили. Большинство изменений, которые мы развертываем, находятся на интерфейсе. Теперь, пока мы запускаем все изменения в базе данных вручную, и я всегда писал небольшой script для возврата.
Если бы у меня было больше таких, я бы использовал Doctrine и Migrations здесь. У меня никогда не было возможности использовать их в производстве, но я уже много играл с ними, и они кажутся очень мощными.
Развертывание
Поэтому всякий раз, когда мы развертываем новую версию, мы создаем тег кода, который мы проверяем на этапе, затем просматриваем пару списков проверок и т.д., а затем мы развертываем код на производственных фронтах. Для выполнения всего развертывания у меня есть пара задач, установленных в Capistrano.
Проверьте этот образец capfile
:
role :www, "web01", "web02", "web03"
role :web, "web01", "web02", "web03", "web04"
role :db, "db01", "db02"
desc "Deploy sites"
task :deploy, :roles => :www do
run "cd /usr/www/website && sudo svn --username=deploy --password=foo update"
end
Capistrano также позволяет запускать любую другую команду без определения задачи:
cap invoke COMMAND="uptime" ROLES=web
(Требуется настройка роли "веб". См. пример выше.)
Стиль и документация по кодированию
Мы в значительной степени придерживаемся стандарта кодирования PEAR, который мы проверяем с помощью PHP_CodeSniffer (phpcs). Когда я говорю довольно много, я имею в виду, что я искал принюшки и добавил несколько исключений из моего собственного удовольствия.
Помимо стиля кодирования, phpcs также проверяет встроенную документацию. Эта документация создается phpDocumentor в конце.
CI
У меня есть оба этих инструментария на нашем CI-сервере (непрерывная интеграция), которая phpUnderControl с использованием вышеприведенного и CruiseControl, phpUnit, Xdebug (пара метрик кода...) и т.д.
unit-testing - это то, чего нам в настоящее время не хватает. Но сейчас мы делаем то, что с каждой ошибкой, которую мы находим в нашем синтаксическом анализаторе (мы анализируем текст в определенных форматах), мы пишем тест, чтобы убедиться, что он не возвращается. Я также написал некоторые базовые тесты, чтобы проверить URL-маршрутизацию и внутренний XMLRPC API, но это действительно подлежит улучшению. Мы также используем тесты типа phpUnit и phpt.
CI-сервер создает новую версию пару раз в день, генерирует графики, документы и всевозможные отчеты.
Помимо всех упомянутых инструментов, мы также используем Google Apps (в основном для электронной почты) и сохраняем вики Google Sites со всей другой документацией. Например, процедура развертывания, списки проверки качества и т.д.