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

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

我正在使用rails api构建一个没有web界面的api。当我在开发中遇到错误时,我希望看到纯文本中的错误消息和stacktrace,而不需要所有的HTML包装。如何覆盖全局异常处理,使其在开发模式下以纯文本/JSON呈现stacktrace,并在生产中显示一般错误消息?

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

我会这样做:

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