2008-09-27 2 views
8

В идеальном мире наши процессы разработки были бы идеальными, в результате регулярные выпуски, которые были настолько тщательно протестированы, что никогда не было бы необходимости «исправлять» запущенное приложение.Каковы некоторые стратегии, позволяющие устанавливать исправленные приложения?

Но, к сожалению, мы живем в реальном мире, и иногда ошибки проскальзывают мимо нас и не поднимают их уродливые головы, пока мы не будем заняты кодированием в следующем выпуске. И ошибка должна быть исправлена ​​. Не как часть следующего запланированного выпуска. Не сегодня, когда движение падает. .

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

Ручная редактирование разметки и хранимых процедур на производственном сервере может быть рецептом катастрофы, но также может предотвратить катастрофу.

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

ответ

2

[Даже если мы испытываем много, прежде чем выпустить,] Что мы делаем это:

Наша SVN выглядит следующим образом:

/repo/trunk/ 
/repo/tags/1.1 
/repo/tags/1.2 
/repo/tags/1.3 

Теперь, когда мы выпускаем, мы создаем тег, который мы в конечном счете, проверить на производстве. Прежде чем мы начнем производство, мы делаем постановку, которая [меньше серверов, но] почти такая же, как и производство.

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

Теперь, когда нам нужно исправление проблема, мы исправим ее в тегах/x сначала, а затем мы svn update из тега и хороши. Иногда мы проходим стадию, с некоторыми проблемами (например, мелкие/тривиальные исправления, такие как орфография), мы обходим стадию.

Единственное, что следует помнить, это применить все исправления от tags/x до trunk.

Если у вас более одного сервера, Capistrano чрезвычайно полезен для выполнения всех этих операций.

+0

Как вы справляетесь с тестированием исправления в разработке? Обычно в блоке dev у меня есть миллион вещей, указывающих на папку с багажником, которые необходимо перенастроить. Кроме того, в чем преимущество тега SVN, просто отмечая последний номер версии при выпуске? Благодаря! – 2008-09-27 15:48:37

0

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

Примеры этого:

  • доступа к базе данных/объектно-реляционного отображения с помощью такого инструмента, как IBatis/IBatis.NET
  • Logging через инструмент, как JLog/NLog
  • Dependency инъекции через инструмент, как Spring/Spring.NET

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

0

Мы делим наш код в коде кода и бизнес-настройках. Классы настройки бизнеса загружаются с помощью отдельного загрузчика классов, и у нас есть инструмент для внесения изменений в исполняемый экземпляр производства. всякий раз, когда нам нужно изменение в любом классе, мы меняем его и отправляем в исполняемый экземпляр. исполняемый экземпляр будет отклонять старый загрузчик классов и использовать новую загрузку класса loader для повторного загрузки классов. Это похоже на горячее развертывание EJB Jboss.

Смежные вопросы