2009-04-25 11 views
9

मेरे पास सीएफ 8 और फ्यूजबॉक्स 5 का उपयोग करने वाली साइट है। कभी भी मुझे साइट पर एक नई सुविधा जोड़ने की ज़रूरत है, मुझे आमतौर पर नियंत्रक, मॉडल या दृश्य या सभी के लिए circuit.xml.cfm पर एक नया फ्यूज जोड़ना होगा। । इन नई सुविधाओं/पृष्ठों को सक्षम करने के मैं इस यूआरएल पर जाएँ:"पार्सबॉक्स फ़ाइल या निर्देशिका नहीं मिली" त्रुटियों के बिना फ़्यूज़बॉक्स ऐप को फिर से लोड करने का सबसे अच्छा तरीका क्या है?

?fusebox.load=true&fusebox.parse=true&fusebox.password=password&fusebox.loadclean=true 

पिछले पैरामीटर एक मैं हाल ही में उठाया और निर्धारित किया है कि इसे का उपयोग अपने नए फ़्यूज़ सक्षम होगा है; इसके बिना नए फ्यूज पहचाने नहीं जाते हैं। हालांकि, जब मैं ऐसा करता हूं, तो मेरे द्वारा बनाई गई सभी पार्स फ़ाइलों को हटा दिया जाता है। यह किसी समस्या का अधिक नहीं है क्योंकि उन्हें पहली बार जरूरी होने पर फ्लाई पर पुनर्जीवित किया जाता है, लेकिन मेरे पास कुछ पेज हैं जो पहुंचने पर त्रुटियों को वापस करते हैं। त्रुटि कहती है कि निर्देशिका नहीं मिली, लेकिन वे वहां हैं, हर बार जब यह आता है क्योंकि यह पार्स फ़ाइल मौजूद नहीं है।

यहाँ स्टैक ट्रेस के साथ एक त्रुटि का एक उदाहरण है:

Error - Parsed File or Directory not found. 

Date/Time: Apr 25 2009 12:26:02 

Type: fusebox.missingParsedFile 

Message: Parsed File or Directory not found. 

Detail: 

Attempting to execute the parsed file 'login.logout.cfm' threw an error. This can occur if the parsed file does not exist in the parsed directory or if the parsed directory itself is missing. 
Stack Trace: 
    coldfusion.runtime.CustomException: Parsed File or Directory not found. 
    at coldfusion.tagext.lang.ThrowTag.doStartTag(ThrowTag.java:124) 
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) 
    at cffusebox52ecfm1214986498.runPage(C:\example.com\fb5core\fusebox5.cfm:216) 
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) 
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) 
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) 
    at cfindex2ecfm584653367.runPage(C:\example.com\index.cfm:3) 
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) 
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) 
    at coldfusion.runtime.CfJspPage._emptyTag(CfJspPage.java:2644) 
    at cfApplication2ecfc1103573364$funcONREQUEST.runFunction(C:\example.com\Application.cfc:36) 
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:418) 
    at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:360) 
    at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:324) 
    at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:56) 
    at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:277) 
    at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:192) 
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:448) 
    at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:308) 
    at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:74) 
    at coldfusion.runtime.AppEventInvoker.onRequest(AppEventInvoker.java:243) 
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:269) 
    at coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:48) 
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40) 
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:86) 
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70) 
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28) 
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38) 
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46) 
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38) 
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) 
    at coldfusion.CfmServlet.service(CfmServlet.java:175) 
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89) 
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:86) 
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42) 
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46) 
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:94) 
    at jrun.servlet.FilterChain.service(FilterChain.java:101) 
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106) 
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42) 
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:284) 
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543) 
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203) 
    at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320) 
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428) 
    at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266) 
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66) 

क्या मैं इस समस्या को इस यूआरएल है, जो पिछले एक की तरह है करने के लिए जाना है, लेकिन fusebox.loadclean बिना = true ठीक करने के उपाय :

?fusebox.password=password&fusebox.load=true&fusebox.parse=true 

क्या मैं कर रहा करने की कोशिश की पहले यूआरएल में जाने के बाद किया गया था, मैं इस एक दूसरे के लिए जाना होगा, लेकिन त्रुटि अभी भी ऊपर फसलों।

जो मैं खोज रहा हूं वह इन त्रुटियों को उत्पन्न किए बिना सर्किट को फिर से लोड करने का उचित तरीका है। मैं इस साइट पर शामिल होने वाला तीसरा डेवलपर हूं, इसलिए पिछले दो में circuit.xml.cfm के प्रत्येक इंस्टेंस को कॉन्फ़िगर करने की अलग-अलग शैलियों हो सकती हैं। इन फ़ाइलों का उपयोग आवश्यक प्रवाह, अतिरिक्त सुरक्षा परतों और कुछ विशेषताओं को निर्दिष्ट करने के अनुप्रयोग प्रवाह को निर्धारित करने के लिए किया जाता है।

<!-- controller/circuit.xml.cfm --> 
<circuit access="public"> 
    <fuseaction name="index"> 
     <set name="request.title" value="Account overview" /> 
     <do action="layout.header" /> 
     <do action="mdashboard.index" /> 
     <do action="vdashboard.index" /> 
     <do action="layout.footer" /> 
    </fuseaction> 

    <fuseaction name="profile"> 
     <set name="request.title" value="Your Profile" /> 
     <do action="layout.header" /> 

     <!-- form submitted to the same page --> 
     <if condition="isDefined('attributes.submit')"> 
      <true> 
       <do action="mdashboard.updateprofile" /> 
       <do action="vdashboard.profile" /> 
      </true> 
      <false> 
       <do action="mdashboard.profile" /> 
       <do action="vdashboard.profile" /> 
      </false> 
     </if> 

     <do action="layout.footer" /> 
    </fuseaction> 
</circuit> 

<!-- model/circuit.xml.cfm --> 
<circuit access="internal"> 
    <fuseaction name="index"> 
     <include template="sqlIndex" /> 
    </fuseaction> 

    <fuseaction name="profile"> 
     <include template="sqlProfile" /> 
    </fuseaction> 

    <fuseaction name="updateprofile"> 
     <include template="actUpdateProfile" /> 
    </fuseaction> 
</circuit> 

<!-- view/circuit.xml.cfm --> 
<circuit access="internal"> 
    <fuseaction name="index"> 
     <include template="dspIndex" /> 
    </fuseaction> 

    <fuseaction name="profile"> 
     <include template="dspProfile" /> 
    </fuseaction> 
</circuit> 

यहाँ है fusebox और ColdFusion विधि का मिश्रण:: यहाँ fusebox विधि है

<!-- controller/circuit.xml.cfm --> 
<circuit access="public"> 
    <fuseaction name="index"> 
     <set name="request.title" value="Account overview" /> 
     <do action="layout.header" /> 
     <include template="ctrlIndex" /> 
     <do action="layout.footer" /> 
    </fuseaction> 

    <fuseaction name="profile"> 
     <set name="request.title" value="Your Profile" /> 
     <do action="layout.header" /> 
     <include template="ctrlProfile" /> 
     <do action="layout.footer" /> 
    </fuseaction> 
</circuit> 

<!-- model/circuit.xml.cfm --> 
<circuit access="internal"> 
</circuit> 

<!-- view/circuit.xml.cfm --> 
<circuit access="internal"> 
</circuit> 

<!-- controller/ctrlProfile.cfm --> 
<cfif isDefined("attributes.submit")> 
    <cfinclude template="../model/actUpdateProfile.cfm"> 
</cfif> 

<cfinclude template="../model/sqlPaymentOptions.cfm"> 
<cfinclude template="../view/dspPaymentOptions.cfm"> 

दोनों ही तरीकों से पूरी साइट पर काम कर रहे हैं, और मैं या तो एक का उपयोग करने के लिए विरोध नहीं कर रहा हूँ, लेकिन मेरे उद्देश्य उपयोगकर्ता द्वारा किसी विशेष पृष्ठ तक पहुंचने का प्रयास करने पर आने वाली किसी भी त्रुटि को कम करना है। मैं सोच रहा था कि शायद समस्या कॉन्फ़िगरेशन की मिश्रित विधि है, मुझे केवल फ्यूजबॉक्स विधि के साथ रहना चाहिए, लेकिन मैं इस त्रुटि में एक आम प्रवृत्ति नहीं पा रहा हूं। जब भी कोई पृष्ठ किसी पृष्ठ को त्रुटि प्राप्त करता है, तो हमारे पास त्रुटि हैंडलर मुझे ईमेल करता है, इसलिए मैं सोच रहा हूं कि मैं स्वचालित रूप से अपना दूसरा यूआरएल कॉल कर सकता हूं और उन्हें उस पृष्ठ पर रीडायरेक्ट कर सकता हूं जो इस विशिष्ट त्रुटि के दौरान त्रुटि उत्पन्न करता है, लेकिन इसमें एक अनंत लूप की संभावना है, और यह वास्तविक समस्या का समाधान नहीं करता है।

क्या मैं इस बारे में गलत तरीके से जा रहा हूं? क्या ऐसे गुणों का सेट है जो मैं यूआरएल में शामिल कर सकता हूं जो साइट को मेरी पार्स फाइलों को साफ़ किए बिना नए फ़्यूज़ को पहचानने के लिए मजबूर करेगा? सीएफ को कोड करना मुश्किल नहीं है, लेकिन मैं अभी भी इसके लिए अपेक्षाकृत नया हूं, इसलिए मैं इस पीछे के बारे में जा रहा था। धन्यवाद!

उत्तर

9

नोट: नई फ़्यूज़ एक fusebox पुनः लोड की जरूरत नहीं है - केवल नए fuseactions एक की आवश्यकता है।

मैं पूरी तरह से निश्चित नहीं हूं कि आपको जो त्रुटियां मिल रही हैं वे हैं जो मुझे लगता है कि वे हैं, लेकिन निम्नलिखित पर अच्छा अभ्यास है ...

जब आप परिवर्तन किए हैं और fusebox फिर से लोड करना है, आप क्या करना चाहिए यह है:

  1. एक ही सर्वर पर एक पूर्व लाइव 'मचान' क्षेत्र के लिए नवीनतम कोड नियोजित करें।
    • fusebox.parseall=true और fusebox.loadclean=true
    • कॉपी वहां से सभी फाइलों को अपने Live webroot में उपयोग करते हुए इस क्षेत्र में अपने पार्स फ़ाइलें उत्पन्न करें।
    • लाइव साइट पर एक फ्यूजबॉक्स fusebox.load=true करें - कुछ और नहीं (पासवर्ड को छोड़कर)।

(नोट: यदि आवश्यक हो, से पहले चरण 3 फिर से अपनी साइट सेट ऑफ़लाइन/रखरखाव मोड, और उसके बाद के बाद चरण 4 इसे वापस डाल ऑनलाइन)

+0

यह वही है जो मैं ढूंढ रहा हूं। मेरी पार्स फ़ाइलों को मेरे स्टेजिंग से लाइव साइट पर ले जाना एक अच्छा विचार है। स्टेजिंग साइट पर फ़्यूज़ेक्शन में किए गए परिवर्तनों के लिए मुझे आइटम # 2 का उपयोग करने की आवश्यकता है, लेकिन जब मैं लाइव साइट में परिवर्तन अपलोड करता हूं तो क्या होगा? बस fusebox.load चलाओ? – Mathachew

+0

पार्स की गई फ़ाइलों को अपलोड करने के बाद मेरा मतलब है। – Mathachew

+0

"स्टेजिंग क्षेत्र" को "स्टेजिंग साइट" (यानी परीक्षण/यूएटी) के साथ भ्रमित न करें। आपके पास लाइव सर्वर * पर * क्षेत्र * होना चाहिए, लेकिन * मुख्य वेबूट * के बाहर * जहां आप अपनी पार्स की गई फाइलें उत्पन्न कर सकते हैं, उस क्षेत्र से सभी बदली गई फ़ाइलों को वेबूट पर कॉपी करें, फिर केवल लाइव साइट पर fusebox.load आवश्यक है। आपका स्टेजिंग/परीक्षण/यूएटी सर्वर इस प्रक्रिया में प्रवेश नहीं करता है। –

0

तो ऐसा कोई कारण fusebox का उपयोग नहीं करते है .mode = "विकास-पूर्ण-लोड" (fusebox.xml में सेट)? यदि आप अभी तक इस मोड में विकास नहीं कर रहे हैं, तो यह आपके जीवन को थोड़ा आसान बना सकता है।

+0

चूंकि वह साइट से कनेक्ट करने वाले उपयोगकर्ताओं के बारे में बात कर रहा है, इसलिए वह या तो लाइव या टेस्ट है, विकास नहीं, इसलिए मोड = "उत्पादन" का उपयोग करना चाहिए। –