如何获取异常以呈现Rails开发错误页面的纯文本版本?

时间:2013-08-22 00:17:49

标签: ruby-on-rails ruby rails-api

我使用rails-api构建一个没有Web界面的API。当我在开发中遇到错误时,我很乐意在没有所有HTML包装的情况下看到错误消息和纯文本堆栈跟踪。如何覆盖全局异常处理,以便它以纯文本/ JSON格式在开发模式下呈现堆栈跟踪,并在生产中呈现一般错误消息?

2 个答案:

答案 0 :(得分:3)

我建议从安全角度来看,在生产代码中包含堆栈跟踪可能不是一个好主意。

我将如何做到这一点:

render :json => {message:exception.message, stack_trace: exception.stacktrace}

我希望这会有所帮助。

Sam澄清之后我可以补充一下:

在API的基本控制器中(可能是ApplicationController):

class ApplicationController < ActionController::Base
    ...
    rescue_from Exception do |exception|
        error = {message:exception.message}
        error[:stack_trace] = exception.stacktrace if Rails.env.development?
        render :json => error
    end
    ...
end

警告:你可能不想以这种方式拯救每一个例外,但如果你这样做就是这样做的。

答案 1 :(得分:2)

对@donleyp的一些改进回答了在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
相关问题