Разрешить уровню темы EventHandler.cfc вызывать исключения в MURA CMS 6?

Может кто-нибудь сказать мне, как я могу включить обработку исключений на уровне темы EventHandler.cfc в MURA CMS 6?

Я уже должен был удалить обработку ошибок в Application.cfc метод ошибки, потому что стандартная процедура не отображала достаточно подробностей об ошибке. Но, похоже, вся структура CFC обернута в <CFTRY> блок, который, откровенно говоря, является странным.

Я бы предпочел решение, которое не связано с использованием <CFCATCH> сбросить ошибки в файл, который является временным решением, которое я использую в данный момент.

Я просто хочу, чтобы Adobe ColdFusion вел себя так же, как и на моих сайтах, не принадлежащих MURA. Когда есть ошибка в CFC, он просто отображает ее, просто и понятно.

Конечно, для производства мой подход отличается.

ОБНОВИТЬ:

Просто чтобы вы знали, я использую Adobe ColdFusion 11 с включенной надежной обработкой ошибок, поэтому я точно знаю, что эта проблема не имеет ничего общего с Adobe ColdFusion. Это определенно проблема MURA CMS.

1 ответ

Решение

Не удаляйте встроенную обработку ошибок. Они создали это, чтобы защитить вас от раскрытия информации. Вместо этого внесите изменения в обработку ошибок в соответствии с вашими потребностями.

Мура имеет в основном три уровня "ловли" ошибок. На уровне темы, на уровне сайта, а затем и на глобальном уровне. (И я обнаружил, что даже на более низком уровне, таком как "site", может быть обнаружена ошибка, которая не препятствует тому, чтобы та же самая ошибка всплывала, а также запускала "глобальный" обработчик.)

Стив Витингтон создал пример Gist, который должен помочь вам начать работу. Смотрите это здесь. Обязательно прочтите комментарии в коде, так как он объясняет, где находятся файлы, и любые параметры конфигурации, необходимые для их вызова.

Копирование его примеров кода здесь в случае, если этот ресурс будет удален в будущем.
Кредит Стив Уингтон

Обработка ошибок Mura. Вы можете использовать любой или даже оба прикрепленных метода, чтобы помочь с обработкой ошибок в Mura CMS. Это работает лучше, чем по умолчанию "К сожалению, произошла ошибка. Пожалуйста, попробуйте позже".

muraCustomErrorFile.cfm

<!---
    1) Drop this file under /config/ directory.
    2) Add errortemplate=/muraWRM/config/customErrorFile.cfm to the settings.ini.cfm file.
    3) Set debuggingenabled=false in the settings.ini.cfm file.
    4) Reload Mura CMS
--->
<cftry>
    <cfset msg = 'MURA ERROR - MESSAGE: #arguments.exception.Message#  DETAIL: #arguments.exception.Detail# ' />
    <cflog type="ERROR" file="MuraError" text="#msg#" />
    <cfcatch></cfcatch>
</cftry>
<cfparam name="url.debug" default="false" />
<cfoutput>
<!DOCTYPE html>
<html>
    <head>
        <title>Site Down For Maintenance</title>
    </head>
    <body>

        <h3>Site Down for Maintenance</h3>

        <cfif url.debug>
            <cfdump var="#arguments#" />

            <!--- You Have Access to arguments.eventName and aguments.exception --->
            <!---
            <h4>Exception Message</h4>
            <p>#arguments.exception.message#</p>

            <h4>Exception Detail</h4>
            <p>#arguments.exception.detail#</p>

            <h4>TagContext[1]</h4>
            <cfdump var="#arguments.exception.TagContext[1]#" />
            --->

            <!--- you could also dump whatever else you want to inspect --->
            <!---
            <cfdump var="#cgi#" label="CGI" />
            <cfdump var="#request#" label="REQUEST" />
            <cfdump var="#session#" label="SESSION" />
            <cfdump var="#application#" label="APPLICATION" />
            --->

        <cfelse>

            <p>This site is temporarily down for maintenance.</p>

        </cfif>

    </body>
</html>
</cfoutput>

muraOnGlobalError.cfm

<cfscript>
// drop this method in either the Site or Theme eventHandler.cfc

public any function onGlobalError($) {
    var tagContext = '';
    var local = {};

    param name='url.debug' default=false;

    local.ex = arguments.$.event('exception');

    local.errorMessage = 'GLOBAL ERROR - MESSAGE: #local.ex.Message#  DETAIL: #local.ex.Detail# ';

    try {
        tagContext = local.ex.TagContext[1];
    } catch(any e) {};

    if ( IsStruct(tagContext) ) {
        local.errorMessage = local.errorMessage & '  
            LINE: #tagContext.LINE#  
            TEMPLATE: #tagContext.TEMPLATE#  
            RAW_TRACE: #tagContext.RAW_TRACE#';
    }

    WriteLog(type='ERROR', file='muraGlobalError', text='#local.errorMessage#');

    if ( url.debug ) {
        WriteOutput('<h2>Debug Output</h2>' & local.errorMessage);
        WriteDump(var=arguments, label='ARGUMENTS', abort=1);
    }
}
</cfscript>
Другие вопросы по тегам