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

Sam*_*erg 8 ruby ruby-on-rails rails-api

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

don*_*eyp 3

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

我将这样做:

render :json => {message:exception.message, stack_trace: exception.stacktrace}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。

在 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
Run Code Online (Sandbox Code Playgroud)

警告:您可能不想以这种方式拯救每一个异常,但如果您这样做的话,您会这样做。

  • 我认为“stacktrace”是一个拼写错误,应该是“backtrace”。 (3认同)