Ruby on rails 如何获取异常以呈现Rails开发错误页面的纯文本版本?
我正在使用rails api构建一个没有web界面的api。当我在开发中遇到错误时,我希望看到纯文本中的错误消息和stacktrace,而不需要所有的HTML包装。如何覆盖全局异常处理,使其在开发模式下以纯文本/JSON呈现stacktrace,并在生产中显示一般错误消息?从安全角度来看,在生产代码中包含堆栈跟踪可能不是一个好主意 我会这样做:Ruby on rails 如何获取异常以呈现Rails开发错误页面的纯文本版本?,ruby-on-rails,ruby,rails-api,Ruby On Rails,Ruby,Rails Api,我正在使用rails api构建一个没有web界面的api。当我在开发中遇到错误时,我希望看到纯文本中的错误消息和stacktrace,而不需要所有的HTML包装。如何覆盖全局异常处理,使其在开发模式下以纯文本/JSON呈现stacktrace,并在生产中显示一般错误消息?从安全角度来看,在生产代码中包含堆栈跟踪可能不是一个好主意 我会这样做: render :json => {message:exception.message, stack_trace: exception.stackt
render :json => {message:exception.message, stack_trace: exception.stacktrace}
我希望这有帮助
在Sam澄清后,我可以补充:
在API的基本控制器中(可能是ApplicationController):
class ApplicationController错误
结束
...
结束
警告:您可能不想以这种方式从每个异常中拯救出来,但如果您这样做了,您会这样做。对@donleyp answer进行了一些改进,以在Rails 3.2中获得清晰的跟踪,并在生产中输出一般错误信息:
class ApplicationController < ActionController::API
...
rescue_from Exception do |exception|
if Rails.env.development?
error = {message:exception.message}
error[:application_trace] = Rails.backtrace_cleaner.clean(exception.backtrace)
error[:full_trace] = exception.backtrace
render :json => error
else
render :text => "Internal server error.", :status => 500
end
end
...
end
class ApplicationController错误
其他的
呈现:text=>internalserver error.,:status=>500
结束
结束
...
结束
我应该澄清这个问题-我只要求开发模式…以及如何覆盖全局响应。我认为stacktrace
是一个打字错误,应该是backtrace
。
class ApplicationController < ActionController::API
...
rescue_from Exception do |exception|
if Rails.env.development?
error = {message:exception.message}
error[:application_trace] = Rails.backtrace_cleaner.clean(exception.backtrace)
error[:full_trace] = exception.backtrace
render :json => error
else
render :text => "Internal server error.", :status => 500
end
end
...
end