8

rails-api を使用して、Web インターフェイスのない API を構築しています。開発中にエラーが発生した場合は、エラー メッセージとスタック トレースだけをプレーン テキストで表示し、HTML ラッピングを一切行わないようにしたいと考えています。グローバル例外処理をオーバーライドして、開発モードでスタック トレースをプレーン テキスト/JSON でレンダリングし、本番環境で一般的なエラー メッセージをレンダリングするにはどうすればよいですか?

4

2 に答える 2

3

本番コードにスタック トレースを含めることは、セキュリティの観点からはおそらくお勧めできません。

これが私がそれを行う方法です:

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

これが役立つことを願っています。

サムの説明の後、次を追加できます。

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

警告: この方法ですべての例外からレスキューする必要はないかもしれませんが、そうする場合はこのようにします。

于 2013-08-22T00:38:53.227 に答える
2

Rails 3.2 でクリーンなトレースを取得し、本番環境で一般的なエラー情報を出力する @donleyp answer に対するいくつかの改善:

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
于 2014-09-16T20:34:33.500 に答える