任何人都可以告诉我,如何在MURA CMS 6中的主题级别EventHandler.cfc
中启用异常处理?
我已经不得不在Application.cfc
错误方法中删除错误处理,因为默认例程没有显示足够的错误详细信息。但是,似乎整个CFC框架都包含在<CFTRY>
块中,坦率地说这很奇怪。
我更喜欢不使用<CFCATCH>
将错误转储到文件的解决方案,这是我目前使用的临时解决方案。
我只是希望Adobe ColdFusion能够像我的非MURA网站一样行事。当CFC出现错误时,它只显示它,简单&amp;简单。
当然,对于生产,我的方法是不同的。
更新:
只是为了让您知道,我正在使用Adobe ColdFusion 11,并且启用了强大的错误处理功能,所以我知道这个问题与Adobe ColdFusion无关。这绝对是MURA CMS的问题。
答案 0 :(得分:2)
不要删除内置错误处理。他们已经采取措施保护您免受信息泄露。而是根据您的需要更改错误处理。
Mura基本上有三个级别的错误“捕捉”。在主题级别,在站点级别,然后在全局。 (而且我发现即使错误可能会在较低级别捕获,例如'site',但不会阻止同样的错误冒泡并且还会触发'全局'处理程序。)
Steve Withington创建了一个Gist示例,可以帮助您入门。 See it here。请务必阅读代码中的注释,因为它解释了文件所在的位置以及调用它们所需的任何配置设置。
在此处复制他的代码示例以防将来资源被删除。
信用Steve Withington
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>