Подтвердить что ты не робот

Перезапустить приложение без перезапуска сервера?

Есть ли способ перезапустить приложение ColdFusion без перезагрузки всего сервера?

На сервере работают два приложения ColdFusion, и я хочу только перезапустить их.

4b9b3361

Ответ 1

Если вы используете Application.cfc, вы можете обновить его, чтобы вы могли принудительно вызвать onApplicationStart(), если что-то конкретное передается в URL-адресе или что-то подобное. Просто поместите чек на этот волшебный токен в onRequestStart() и вызовите onApplicationStart(), если он есть.

Если вы этого не сделаете, вы можете попробовать предложение @Marcos. Я не уверен, какие последствия могут иметь ваши приложения. Я бы предложил на самом деле переименовать ваше приложение, поэтому оно начинается как новое приложение.

Ответ 3

Вот вы, моя CF7/8 версия CF9 ApplicationStop. Я считаю, что это потокобезопасно, отметив комментарий Шона.

<cffunction name="ApplicationStop" returntype="boolean" output="false">
 <cfif IsDefined('application')>
   <cftry>
     <!--- This is just in case there no app scope but variables.application --->
     <cfset CreateObject('java', 'coldfusion.runtime.ApplicationScopeTracker').cleanUp(application) />
     <cfreturn true />
     <cfcatch type="any"></cfcatch>
   </cftry>
 </cfif>
 <cfreturn false />
</cffunction>

Как упоминал Генри, он написал мой блог на тему: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/

Ответ 4

<cfset structClear(application) /> 

Ответ 5

Менее инвазивным способом прекращения вашего приложения является временная установка ApplicationTimeout на что-то очень короткое.

Вот пример из файла application.cfc, где приложение установлено на тайм-аут через 10 секунд, чего недостаточно для внесения изменений, а затем для проверки:

<cfcomponent displayname="Application">
    <cfscript>
        this.name = "myAppName";
        this.setclientcookies="yes";
        this.sessionmanagement="yes";
        this.sessiontimeout= CreateTimeSpan(0,0,60,0);
        this.applicationTimeout= CreateTimeSpan(0,0,0,10);
    </cfscript>
    ...
</cfcomponent>

Возможно, вам также потребуется ограничить сеанс. См. эту статью от Ben Nadel для углубленного изучения времени ожидания приложений и сеансов.

Ответ 6

Если вы используете application.cfc, поместите это вверху своей функции onRequestStart:

<!--- RESET APP? --->
<cfif isdefined("url.reinit")>
    <cfset OnApplicationStart()>
    <cfset OnSessionStart()>
</cfif>

Затем вы можете передать url var в любой cfm, а приложение будет reset.

Ответ 7

Обычно я помещаю ссылку на каждый пользовательский сеанс в структуру в моей области приложения, чтобы отслеживать, что происходит в приложении. Возможно, что-то подобное в области сервера может помочь здесь. Попробуйте:

< cfset server.runningApplications [ "myApp" ] = Приложение / >

Затем у вас будет ссылка на фактический объект приложения вне области действия этого приложения. Вы могли бы попробовать всевозможные деструктивные вещи, чтобы избавиться от него. Попробуйте это на свой страх и риск!!! И сделайте это на dev-сервере, прежде чем делать это на своей производственной коробке.;)

Ответ 8

Используйте cfinvoke.

<cfinvoke method="onApplicationEnd" component="Application">
    <cfinvokeargument name="ApplicationScope" value="#application#" />
</cfinvoke>