Сброс области применения в кластере ColdFusion - PullRequest
2 голосов
/ 07 февраля 2011

Есть ли способ сбросить приложение через onApplicationStart и убедиться, что приложение всех серверов в кластере перезапущено?

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

Ответы [ 2 ]

5 голосов
/ 07 февраля 2011

Одним из предложений является наличие в вашем проекте файла с отметкой даты, который может прочитать каждый сервер.

Получите CF, чтобы сохранить дату в приложении при запуске и сравнить ее с этим файлом в каждом onRequestStart ().

Если дата когда-либо изменяется, тогда CF запускает onApplicationStart () этого сервера.

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

Ура, Джеймс

3 голосов
/ 07 февраля 2011

Наши приложения настроены на сброс своих областей через переменную URL.Таким образом, вы можете использовать подобный код для перезапуска приложений на всех серверах в вашем кластере через http через страницу в вашем администраторе:

<cfset serverList = "Server1.domain.com,Server2.domain.com" />
<cfset threadList = "" />
<cfloop list="#serverList#" index="currentServer">
    <cfset threadList = ListAppend(threadList, "thread#currentServer#") />
    <cfthread
        action="run"
        name="thread#currentServer#"
        url="http://#currentServer#?URLToResetScope"
        key="#currentIndex#"
    >
        <cfhttp method="get" url="#Attributes.URL#" result="thread.cfhttp" />
    </cfthread>

</cfloop>
<cfthread action="join" name="#threadList#" timeout="120000" />
<cfloop list="#threadList#" index="currentThread">
    <cfset Results &= currenthThread & ": " & threadresult.cfhttp />
</cfloop>

Что мы делаем, это берем список серверов, затем циклически повторяемэтот список, а cfthread передает запрос каждому серверу для сброса его собственной области.Затем мы объединяем все эти потоки вместе и перебираем их, чтобы получить результаты каждого запроса.Затем мы можем отобразить эти результаты в админке, чтобы убедиться, что все серверы в кластере обновлены правильно.Если есть сервер, который не был обновлен правильно, мы можем выполнить сброс этого сервера по отдельности.

Дан

...