10

CF8とFusebox5を使用しているサイトがあります。サイトに新しい機能を追加する必要があるときはいつでも、コントローラー、モデル、ビュー、またはすべての回路.xml.cfmに新しいヒューズを追加する必要があります。これらの新機能/ページを有効にするには、次のURLにアクセスします。

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

最後のパラメーターは、私が最近拾い上げたパラメーターであり、それを使用すると新しいヒューズが有効になると判断しました。それがないと、新しいヒューズは認識されません。ただし、これを行うと、以前に生成されたすべての解析ファイルが削除されます。初めて必要になったときにオンザフライで再生成されるため、これはそれほど問題にはなりませんが、アクセスしたときにエラーを返すページがいくつかあります。エラーはディレクトリが見つからないことを示していますが、ディレクトリは存在します。これが発生するたびに、解析ファイルが存在しないためです。

スタックトレースに関する1つのエラーの例を次に示します。

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)

この問題を修正するために私が行うことは、前のURLと似ていますが、fusebox.loadclean=trueがない次のURLに移動することです。

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

私が試したのは、最初のURLに移動した後、この2番目のURLに移動することでしたが、それでもエラーが発生します。

私が探しているのは、これらのエラーを生成せずに回路をリロードする適切な方法です。私はこのサイトに参加する3番目の開発者なので、前の2つでは、circuit.xml.cfmの各インスタンスを構成するスタイルが異なっていた可能性があります。これらのファイルは、必要なもの、追加のセキュリティレイヤー、および特定の属性の指定のアプリケーションフローを決定するために使用されます。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>

Fuseboxと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">

どちらの方法もサイト全体で採用されており、どちらも使用することに反対していませんが、ユーザーが特定のページにアクセスしようとしたときに発生する可能性のあるエラーを減らすことが私の目的です。問題は構成の混合方法である可能性があると考えていました。たとえば、Fuseboxの方法のみに固執する必要がありますが、このエラーの一般的な傾向を見つけることができませんでした。ページにエラーが発生するたびにエラーハンドラーからメールが届くので、2番目のURLを自動的に呼び出して、この特定のエラーが発生したときにエラーを生成したページにリダイレクトできると考えていますが、無限ループの可能性があり、実際の問題には対処していません。

私はこれについて間違って行っていますか?解析ファイルをクリアせずにサイトに新しいヒューズを認識させるためにURLに含めることができる属性のセットはありますか?CF自体をコーディングするのは難しいことではありませんが、私はまだCFに比較的慣れていないので、これを逆に進めることができます。ありがとう!

4

2 に答える 2

11

注: 新しいヒューズはヒューズボックスのリロードを必要としません - 新しいヒューズアクションのみが必要です。

あなたが得ているエラーが私が考えているものであるかどうかは完全にはわかりませんが、以下は関係なく良い習慣です...

変更を行い、 fusebox をリロードする必要がある場合は、次のようにする必要があります。

  1. 最新のコードを同じサーバーのライブ前の「ステージング」領域にデプロイします。
    • fusebox.parseall=trueと を使用して、この領域に解析済みファイルを生成します。fusebox.loadclean=true
    • そこからすべてのファイルをライブ Web ルートにコピーします。
    • fusebox.load=trueライブ サイトでヒューズボックスを実行します。他には何もありません (パスワード以外)。

(注: 必要に応じて、手順 3 の前にサイトをオフライン/メンテナンス モードに設定し、手順 4 の後で再度オンラインに戻します)

于 2009-04-25T20:37:39.173 に答える
0

fusebox.mode = "development-full-load" (fusebox.xml で設定) を使用しない理由はありますか? このモードでまだ開発していない場合、これによりライブが少し楽になります。

于 2009-04-26T18:01:17.153 に答える