Tôi đang sử dụng rails-api để xây dựng một API không có giao diện web. Khi tôi gặp lỗi trong quá trình phát triển, tôi chỉ muốn xem thông báo lỗi và stacktrace ở dạng văn bản thuần túy mà không có tất cả gói HTML. Làm cách nào để ghi đè lên xử lý ngoại lệ toàn cục để nó hiển thị stacktrace trong chế độ phát triển trong văn bản thuần túy/JSON và thông báo lỗi chung trong sản xuất?Làm cách nào để nhận ngoại lệ để hiển thị phiên bản thuần văn bản của trang lỗi phát triển Rails?
8
A
Trả lời
3
Tôi khuyên bạn nên bao gồm dấu vết ngăn xếp trong mã sản xuất có lẽ không phải là ý tưởng tốt từ điểm bảo mật.
Dưới đây là làm thế nào tôi sẽ làm điều đó:
render :json => {message:exception.message, stack_trace: exception.stacktrace}
Tôi hy vọng điều này sẽ giúp.
Sau khi làm rõ Sam tôi có thể thêm:
Trong điều khiển cơ sở của bạn đối với API của bạn (có thể là 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
Nên biết trước: Bạn có thể không muốn giải cứu từ mọi ngoại lệ duy nhất trong cách này nhưng đây là cách bạn sẽ làm điều đó nếu bạn đã làm.
2
Một số cải tiến so với câu trả lời @donleyp để có được một dấu vết sạch trong Rails 3.2 và đầu ra generic thông tin lỗi trong sản xuất:
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
tôi nên làm rõ các câu hỏi - Tôi đang yêu cầu cho chế độ phát triển chỉ ... và cách ghi đè phản hồi trên toàn cầu. –
Tôi nghĩ rằng 'stacktrace' là một lỗi đánh máy, và nên là' backtrace'. – Jacob