J'ai un site utilisant CF8 et Fusebox 5. Chaque fois que j'ai besoin d'ajouter une nouvelle fonctionnalité sur le site, je dois généralement ajouter un nouveau fusible à circuit.xml.cfm pour le contrôleur, le modèle ou la vue, ou tout . Pour activer ces nouvelles fonctionnalités/pages, je vais à l'adresse suivante:Quelle est la meilleure façon de recharger une application Fusebox sans avoir les erreurs "fichier analysé ou répertoire non trouvé"?
?fusebox.load=true&fusebox.parse=true&fusebox.password=password&fusebox.loadclean=true
Le dernier paramètre est celui que je récemment repris sur et a déterminé que l'utiliser permettrait mes nouveaux fusibles; sans cela, les nouveaux fusibles ne sont pas reconnus. Toutefois, lorsque je fais cela, tous mes fichiers d'analyse qui ont été générés avant sont supprimés. Ce n'est pas vraiment un problème car ils sont régénérés à la volée quand ils sont nécessaires pour la première fois, mais j'ai quelques pages qui retournent des erreurs quand on les accède. L'erreur dit répertoire non trouvé, mais ils sont là, chaque fois que cela arrive, c'est parce que le fichier d'analyse n'existe pas.
Voici un exemple d'une erreur avec la trace de la pile:
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)
Ce que je fais pour résoudre ce problème est d'aller à l'adresse suivante, qui est comme la précédente, mais sans fusebox.loadclean = true :
?fusebox.password=password&fusebox.load=true&fusebox.parse=true
ce que j'ai essayé de faire était après être allé à la première url, je vais à cette seconde, mais l'erreur se pose toujours.
Ce que je cherche, c'est la façon correcte de recharger les circuits sans générer ces erreurs. Je suis le troisième développeur à s'impliquer sur ce site, donc les deux précédents ont eu différents styles de configuration de chaque instance de circuit.xml.cfm. Ces fichiers sont utilisés pour déterminer le flux d'applications de ce qui est nécessaire, des couches de sécurité supplémentaires et la spécification de certains attributs. Voici la méthode Fusebox:
<!-- 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>
Voici le mélange de la méthode Fusebox et ColdFusion:
<!-- 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">
Les deux méthodes sont employées à travers le site, et je ne suis pas opposé à l'utilisation de l'un, mais mon objectif est de réduire toute erreur qui pourrait survenir lorsque l'utilisateur tente d'accéder à une page particulière. Je pensais que peut-être le problème est la méthode mixte de configurations, que je devrais coller, disons, la méthode Fusebox seulement, mais je n'ai pas été en mesure de trouver une tendance commune dans cette erreur. Le gestionnaire d'erreurs que nous avons mis en place m'envoie un mail à chaque fois qu'une page reçoit une erreur, donc je pense que je pourrais automatiquement appeler ma 2ème URL et la rediriger vers la page qui a généré l'erreur quand cette erreur spécifique se produit, mais cela le potentiel d'une boucle infinie, et il ne répond pas au vrai problème.
Est-ce que je vais mal à ce sujet? Y a-t-il un ensemble d'attributs que je peux inclure dans l'URL qui forcera le site à reconnaître de nouveaux fusibles sans effacer mes fichiers d'analyse? Les FC elles-mêmes ne sont pas difficiles à coder, mais je n'en suis pas encore au début, alors je pourrais revenir en arrière. Merci!
C'est exactement ce que je cherche. Déplacer mes fichiers d'analyse de ma mise en scène vers un site en ligne est une excellente idée. Les modifications que je fais aux fuseactions sur le site de transit nécessitent que j'utilise l'élément # 2, mais qu'en est-il lorsque je télécharge les modifications sur le site en ligne? Il suffit de lancer fusebox.load? – Mathachew
Après avoir téléchargé les fichiers analysés, je veux dire. – Mathachew
Ne confondez pas "zone de transfert" avec "site de transit" (c'est-à-dire test/UAT). Vous devez avoir une zone * sur le serveur live * mais * en dehors de la racine principale * où vous pouvez générer vos fichiers analysés, copier tous les fichiers modifiés de cette zone sur la racine Web puis seulement fusebox.load est nécessaire sur le site en ligne. Votre serveur de transfert/test/UAT n'entre pas dans ce processus. –