Безошибочный процесс обновления приложения ColdFusion - PullRequest
2 голосов
/ 24 сентября 2011

При обновлении сайта ColdFusion с помощью svn или git наступает момент, когда половина репо обновляется, а другая половина - нет, в течение которого может возникнуть запрос, что может означать, что в некоторых случаях эпический сбой. *

Так что мне кажется, что мне нужен способ приостановить запросы, сделанные в то время, когда svn / git обновляет папку, в которой находится источник веб-сайта. После этого я могу получить обновленный номер версии, чтобы приложение само обновлялось, прежде чем отвечать на любые запросы.

Это короткий промежуток времени, но может вызвать много разных проблем в зависимости от приложения.

У кого-нибудь есть полезные советы?

Ответы [ 4 ]

8 голосов
/ 24 сентября 2011

Для наших приложений мы следуем совету Адама и удаляем узел из балансировщика нагрузки;однако для тех, у кого только один сервер, есть простое решение.

  1. Вход в администратор ColdFusion
  2. Нажмите «Кэширование» на левой боковой панели
  3. Убедитесь, что выбран параметр «Надежный кэш».
  4. В дальнейшем, после завершения проверки кода, вы «очистите кэш шаблона», что можно сделать на странице «Кэширование», используя API-интерфейс CFAdmin или приложение Adobe Air ColdFusion Server Manager.

Этот параметр гарантирует, что ваш новый код CFML не будет «живым», пока вы не очистите кэш шаблона после успешной проверки кода из вашего SCM.Кроме того, это может повысить производительность до 40%, поскольку ColdFusion больше не будет проверять ваши файлы .cfc / .cfm на наличие изменений.Все производственные серверы должны работать с установленным параметром.

6 голосов
/ 24 сентября 2011

Обычно проблема такого рода смягчается при использовании кластера. (Но не основная причина его использования.) Вы сливаете все соединения с одного узла, удаляете его из кластера, обновляете его, помещаете обратно в кластер, удаляете другой и повторяете, пока все узлы не обновятся.

Вам не нужно делать их все последовательно, есть много способов сделать это, если у вас есть несколько узлов. Но это общая идея.

3 голосов
/ 24 сентября 2011

Если у вас есть контроль над веб-сервером, вы можете перенаправить публичные запросы в другую папку, содержащую только сообщение об обслуживании. В противном случае вы можете использовать onRequestStart для перенаправления всех запросов в файл maintenance.cfm.

1 голос
/ 24 сентября 2011

Это просто мысль, я не знаю, сработает ли это. Но что, если бы вы в начале процесса развертывания заменили ваш Application.cfc новым, который имел это в методе onRequestStart ()?

 <cffunction name="onRequestStart">
      <cfset sleep(5000) />
 </cffunction>

Затем, когда развертывание будет завершено, замените cfc снова оригиналом.

Вы можете даже сделать его чище с помощью cfinclude.

 <cffunction name="onRequestStart">
      <cfinclude template="sleep.cfm" />
 </cffunction>

Тогда вы можете просто заменить файл sleep.cfm пустым файлом, если не хотите, чтобы происходило sleep ()

...