2010-06-25 23 views
22

क्या पूरे सर्वर को पुनरारंभ किए बिना कोल्डफ्यूजन एप्लिकेशन को पुनरारंभ करने का कोई तरीका है?सर्वर को पुनरारंभ किए बिना पुनरारंभ करें?

सर्वर पर चल रहे दो कोल्डफ्यूजन अनुप्रयोग हैं और मैं केवल उनमें से एक को पुनरारंभ करना चाहता हूं।

उत्तर

21

यदि आप Application.cfc का उपयोग कर रहे हैं, तो आप इसे अपडेट कर सकते हैं ताकि आप यूपीएल में कुछ विशिष्ट पारित होने पर, या कुछ समान होने पर कॉल को लागू कर सकें। बस उस तर्क टोकन के लिए RequestStart() में एक चेक डालें, और यदि यह है तो एप्प्लिकेशन स्टार्ट() पर कॉल करें।

यदि आप नहीं हैं, तो आप @ मार्कोस के सुझाव को आजमा सकते हैं। मुझे यकीन नहीं है कि आपके आवेदन में कौन सी विधियां हो सकती हैं। मैं जो सुझाव दूंगा वह वास्तव में आपके आवेदन का नाम बदल रहा है, इसलिए यह एक नए ऐप के रूप में शुरू होता है।

0

मैं आमतौर पर ऐप में क्या हो रहा है इसकी निगरानी करने के लिए अपने एप्लिकेशन स्कोप में एक संरचना में प्रत्येक उपयोगकर्ता के सत्र का संदर्भ डालता हूं। शायद सर्वर स्कोप में कुछ ऐसा करने से यहां मदद मिल सकती है। प्रयास करें:

< cfset server.runningApplications [ "MyApp"] = आवेदन/>

तो फिर तुम कि आवेदन के दायरे से बाहर वास्तविक आवेदन वस्तु के लिए एक संदर्भ होगा। आप इससे छुटकारा पाने के लिए सभी विध्वंसक चीजों को आजमा सकते हैं। इसे अपने जोखिम पर आज़माएं !!! और इसे अपने उत्पादन बॉक्स पर करने से पहले इसे एक dev सर्वर पर करें। ;)

19

आप CF9 पर हैं, तो ApplicationStop()https://cfdocs.org/applicationstop

+6

यह एकमात्र 'सही' समाधान है (और आपको सीएफ 9 पर होना है)। बाकी सब कुछ संभावित थ्रेड सुरक्षा मुद्दों के साथ एक संदिग्ध कामकाज है। –

3
<cfset structClear(application) /> 
+0

उत्तर कहां है? – Henry

+0

मेड सुझाव दिखाई दे रहा है। : - पूर्वावलोकन का प्रयोग करें। इसके अलावा, वह सुझाव पहले ही दिया जा चुका था।यदि आप सहमत हैं, तो उस सुझाव को वोट दें। इसे पुनः सबमिट न करें। –

0

उपयोग cfinvoke चलाते हैं।

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

मुझे नहीं लगता कि चल रहा है एप्लिकेशन()) एप्लिकेशन को पुनरारंभ करने के कारण कुछ भी उपयोगी होगा। CF8/CFMX7 पर, ऐप्लिकेशंस स्टार्ट() पर कॉल करना सबसे नज़दीक है जो आप चाहते हैं कि आप जिस व्यवहार को चाहते हैं उसे प्राप्त करें - लेकिन सावधान रहें कि यह थ्रेड सुरक्षित नहीं होगा: सीएफ स्वचालित रूप से सिंगल थ्रेड्स पर कॉल करता है एप्लिकेशन()) जब यह इसे कॉल करता है लेकिन आप ' ऐसा करते हैं जब आप इसे कॉल करते हैं। CF9 पर, applicationStop() ऐसा करने का सही तरीका है। –

3

अपने अनुप्रयोग समाप्त होने के एक कम आक्रामक तरीका अस्थायी रूप से बहुत ही कम कुछ करने के लिए ApplicationTimeout स्थापित करने के लिए है:

<cffunction name="ApplicationStop" returntype="boolean" output="false"> 
<cfif IsDefined('application')> 
    <cftry> 
    <!--- This is just in case there's 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> 

हेनरी द्वारा उल्लेख किया है, वह इस विषय पर मेरी ब्लॉग पोस्ट है।

यहाँ जहां ऐप 10 सेकंड में समय-समाप्त हुआ पर सेट है एक application.cfc फ़ाइल है, जो बहुत सारे बदलाव करने और फिर वापस जाँच के लिए कम है से एक उदाहरण है:

<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> 

आप सीमित करने के लिए आवश्यकता हो सकती है सत्र भी। आवेदन और सत्र टाइमआउट पर गहराई से देखने के लिए this article by Ben Nadel देखें।

2

आप application.cfc का उपयोग कर रहे हैं, तो आपके onRequestStart समारोह के शीर्ष पर इस छड़ी:

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

तो फिर तुम किसी भी CFM करने के लिए एक यूआरएल वर पारित कर सकते हैं और एप्लिकेशन को रीसेट कर देगा।

संबंधित मुद्दे