Наша производственная среда включает в себя следующее:
- 3 интерфейса, обслуживающих наш сайт
- 2 базы данных (Master-Slave, репликация)
- 1 смешанный, который запускает httpd и базу данных для рекламы
Наша среда разработки - это один сервер, работающий как с базой данных, так и с httpd. С точки зрения конфигурации у нас есть разные рабочие пространства для каждой настройки, а наш VC - это subversion. Постановка тоже довольно проста - она проходит на одном из интерфейсов.
Изменения в базе данных
Первоначально мы потратили много времени на разработку базы данных, и, похоже, она действительно окупилась. Мы ничего не изменили за пять месяцев. Большинство изменений, которые мы внедряем, находятся на фронтенде. Итак, пока мы запускаем все изменения в базе данных вручную, и я всегда писал небольшой скрипт для возврата.
Если бы у меня их было больше, я бы использовал здесь Доктрина и Миграции . У меня никогда не было возможности использовать их в производстве, но я уже много играл с ними, и они кажутся очень мощными.
Deployment
Таким образом, всякий раз, когда мы внедряем новую версию, мы создаем тег кода, который мы проверяем при подготовке, затем просматриваем несколько списков проверок и т. Д., А затем мы развертываем код на рабочих интерфейсах. Для выполнения всего развертывания у меня есть пара настроек в 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
(Требуется настройка роли "web". См. Пример выше.)
Стиль кодирования и документация
Мы в значительной степени придерживаемся стандарта кодирования PEAR , который мы проверяем с помощью PHP_CodeSniffer (phpcs). Когда я говорю довольно много, я имею в виду, что я раздвоил предоставленные фырканья и добавил несколько исключений из моего собственного удовольствия.
Помимо стиля кодирования, phpcs также проверяет встроенную документацию. Эта документация создается в конце phpDocumentor .
CI
У меня оба эти инструмента настроены на нашем CI-сервере ( Continuos-Integration ), который phpUnderControl с использованием вышеупомянутого и CruiseControl, phpUnit , Xdebug (пара метрик кода ...) и т. Д.
юнит-тестирование - это то, чего нам сейчас не хватает. Но сейчас мы делаем то, что с каждой ошибкой, которую мы находим в нашем механизме синтаксического анализа (мы анализируем текст в определенных форматах), мы пишем тест, чтобы убедиться, что он не возвращается. Я также написал несколько базовых тестов для проверки URL-маршрутизации и внутреннего API XMLRPC, но это действительно подлежит улучшению. Мы используем как тесты в стиле phpUnit, так и phpt .
CI-сервер создает новую версию пару раз в день, генерирует графики, документы и всевозможные отчеты.
Помимо всех упомянутых инструментов, мы также используем Google Apps (в основном для электронной почты) и поддерживаем вики-сайты Google со всей другой документацией. Например, процедура развертывания, списки тестов QA и т. Д.