提问人:gordie 提问时间:11/11/2022 最后编辑:gordie 更新时间:11/11/2022 访问量:123
如何在 API 调用中呈现完整的 Ruby on Rails 错误?
How to render complete Ruby on Rails errors on an API call?
问:
我构建了一个 Ruby on Rails 应用程序,我可以调用端点来获取一些 API 响应。
我通常像这样渲染数据和错误:
def my_fn
begin
#...computing data...
response = {
#...my data here...
}
#...returning OK response...
render status: 200, json: response
#...handling errors...
rescue StandardError => e
render status: 400, json: { message: e.to_s }
end
end
它返回我的结果如下
{
"message": "My custom error message"
}
但是当我的应用程序真的崩溃时,我会得到更详细的响应,比如
{
"status": 500,
"error": "Internal Server Error",
"exception": "#<NameError: undefined local variable or method `aa' for #<WpsstmController:0x00000000027e98>>",
"traces": {
"Application Trace": [
{
"exception_object_id": 81760,
"id": 0,
"trace": "app/controllers/wpsstm_controller.rb:48:in `get_tracklist'"
}
],
"Framework Trace": [
{
"exception_object_id": 81760,
"id": 1,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'"
},
{
"exception_object_id": 81760,
"id": 2,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/base.rb:228:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 3,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/rendering.rb:30:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 4,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/callbacks.rb:42:in `block in process_action'"
},
{
"exception_object_id": 81760,
"id": 5,
"trace": "activesupport (6.1.4.7) lib/active_support/callbacks.rb:106:in `run_callbacks'"
},
{
"exception_object_id": 81760,
"id": 6,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/callbacks.rb:41:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 7,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/rescue.rb:22:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 8,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'"
},
{
"exception_object_id": 81760,
"id": 9,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications.rb:203:in `block in instrument'"
},
{
"exception_object_id": 81760,
"id": 10,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'"
},
{
"exception_object_id": 81760,
"id": 11,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications.rb:203:in `instrument'"
},
{
"exception_object_id": 81760,
"id": 12,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/instrumentation.rb:33:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 13,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 14,
"trace": "activerecord (6.1.4.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 15,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/base.rb:165:in `process'"
},
{
"exception_object_id": 81760,
"id": 16,
"trace": "actionview (6.1.4.7) lib/action_view/rendering.rb:39:in `process'"
},
{
"exception_object_id": 81760,
"id": 17,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal.rb:190:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 18,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal.rb:254:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 19,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 20,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:33:in `serve'"
},
{
"exception_object_id": 81760,
"id": 21,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'"
},
{
"exception_object_id": 81760,
"id": 22,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:32:in `each'"
},
{
"exception_object_id": 81760,
"id": 23,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:32:in `serve'"
},
{
"exception_object_id": 81760,
"id": 24,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:842:in `call'"
},
{
"exception_object_id": 81760,
"id": 25,
"trace": "rack (2.2.4) lib/rack/etag.rb:27:in `call'"
},
{
"exception_object_id": 81760,
"id": 26,
"trace": "rack (2.2.4) lib/rack/conditional_get.rb:40:in `call'"
},
{
"exception_object_id": 81760,
"id": 27,
"trace": "rack (2.2.4) lib/rack/head.rb:12:in `call'"
},
{
"exception_object_id": 81760,
"id": 28,
"trace": "activerecord (6.1.4.7) lib/active_record/migration.rb:601:in `call'"
},
{
"exception_object_id": 81760,
"id": 29,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'"
},
{
"exception_object_id": 81760,
"id": 30,
"trace": "activesupport (6.1.4.7) lib/active_support/callbacks.rb:98:in `run_callbacks'"
},
{
"exception_object_id": 81760,
"id": 31,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 32,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/executor.rb:14:in `call'"
},
{
"exception_object_id": 81760,
"id": 33,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'"
},
{
"exception_object_id": 81760,
"id": 34,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'"
},
{
"exception_object_id": 81760,
"id": 35,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'"
},
{
"exception_object_id": 81760,
"id": 36,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:37:in `call_app'"
},
{
"exception_object_id": 81760,
"id": 37,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:26:in `block in call'"
},
{
"exception_object_id": 81760,
"id": 38,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:99:in `block in tagged'"
},
{
"exception_object_id": 81760,
"id": 39,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:37:in `tagged'"
},
{
"exception_object_id": 81760,
"id": 40,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:99:in `tagged'"
},
{
"exception_object_id": 81760,
"id": 41,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 42,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'"
},
{
"exception_object_id": 81760,
"id": 43,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 44,
"trace": "rack (2.2.4) lib/rack/runtime.rb:22:in `call'"
},
{
"exception_object_id": 81760,
"id": 45,
"trace": "activesupport (6.1.4.7) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'"
},
{
"exception_object_id": 81760,
"id": 46,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/executor.rb:14:in `call'"
},
{
"exception_object_id": 81760,
"id": 47,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/static.rb:24:in `call'"
},
{
"exception_object_id": 81760,
"id": 48,
"trace": "rack (2.2.4) lib/rack/sendfile.rb:110:in `call'"
},
{
"exception_object_id": 81760,
"id": 49,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/host_authorization.rb:119:in `call'"
},
{
"exception_object_id": 81760,
"id": 50,
"trace": "rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'"
},
{
"exception_object_id": 81760,
"id": 51,
"trace": "railties (6.1.4.7) lib/rails/engine.rb:539:in `call'"
},
{
"exception_object_id": 81760,
"id": 52,
"trace": "puma (4.3.12) lib/puma/configuration.rb:228:in `call'"
},
{
"exception_object_id": 81760,
"id": 53,
"trace": "puma (4.3.12) lib/puma/server.rb:727:in `handle_request'"
},
{
"exception_object_id": 81760,
"id": 54,
"trace": "puma (4.3.12) lib/puma/server.rb:476:in `process_client'"
},
{
"exception_object_id": 81760,
"id": 55,
"trace": "puma (4.3.12) lib/puma/server.rb:332:in `block in run'"
},
{
"exception_object_id": 81760,
"id": 56,
"trace": "puma (4.3.12) lib/puma/thread_pool.rb:134:in `block in spawn_thread'"
}
],
"Full Trace": [
{
"exception_object_id": 81760,
"id": 0,
"trace": "app/controllers/wpsstm_controller.rb:48:in `get_tracklist'"
},
{
"exception_object_id": 81760,
"id": 1,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'"
},
{
"exception_object_id": 81760,
"id": 2,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/base.rb:228:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 3,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/rendering.rb:30:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 4,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/callbacks.rb:42:in `block in process_action'"
},
{
"exception_object_id": 81760,
"id": 5,
"trace": "activesupport (6.1.4.7) lib/active_support/callbacks.rb:106:in `run_callbacks'"
},
{
"exception_object_id": 81760,
"id": 6,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/callbacks.rb:41:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 7,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/rescue.rb:22:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 8,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'"
},
{
"exception_object_id": 81760,
"id": 9,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications.rb:203:in `block in instrument'"
},
{
"exception_object_id": 81760,
"id": 10,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications/instrumenter.rb:24:in `instrument'"
},
{
"exception_object_id": 81760,
"id": 11,
"trace": "activesupport (6.1.4.7) lib/active_support/notifications.rb:203:in `instrument'"
},
{
"exception_object_id": 81760,
"id": 12,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/instrumentation.rb:33:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 13,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 14,
"trace": "activerecord (6.1.4.7) lib/active_record/railties/controller_runtime.rb:27:in `process_action'"
},
{
"exception_object_id": 81760,
"id": 15,
"trace": "actionpack (6.1.4.7) lib/abstract_controller/base.rb:165:in `process'"
},
{
"exception_object_id": 81760,
"id": 16,
"trace": "actionview (6.1.4.7) lib/action_view/rendering.rb:39:in `process'"
},
{
"exception_object_id": 81760,
"id": 17,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal.rb:190:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 18,
"trace": "actionpack (6.1.4.7) lib/action_controller/metal.rb:254:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 19,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'"
},
{
"exception_object_id": 81760,
"id": 20,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:33:in `serve'"
},
{
"exception_object_id": 81760,
"id": 21,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'"
},
{
"exception_object_id": 81760,
"id": 22,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:32:in `each'"
},
{
"exception_object_id": 81760,
"id": 23,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/journey/router.rb:32:in `serve'"
},
{
"exception_object_id": 81760,
"id": 24,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/routing/route_set.rb:842:in `call'"
},
{
"exception_object_id": 81760,
"id": 25,
"trace": "rack (2.2.4) lib/rack/etag.rb:27:in `call'"
},
{
"exception_object_id": 81760,
"id": 26,
"trace": "rack (2.2.4) lib/rack/conditional_get.rb:40:in `call'"
},
{
"exception_object_id": 81760,
"id": 27,
"trace": "rack (2.2.4) lib/rack/head.rb:12:in `call'"
},
{
"exception_object_id": 81760,
"id": 28,
"trace": "activerecord (6.1.4.7) lib/active_record/migration.rb:601:in `call'"
},
{
"exception_object_id": 81760,
"id": 29,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'"
},
{
"exception_object_id": 81760,
"id": 30,
"trace": "activesupport (6.1.4.7) lib/active_support/callbacks.rb:98:in `run_callbacks'"
},
{
"exception_object_id": 81760,
"id": 31,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/callbacks.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 32,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/executor.rb:14:in `call'"
},
{
"exception_object_id": 81760,
"id": 33,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'"
},
{
"exception_object_id": 81760,
"id": 34,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'"
},
{
"exception_object_id": 81760,
"id": 35,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'"
},
{
"exception_object_id": 81760,
"id": 36,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:37:in `call_app'"
},
{
"exception_object_id": 81760,
"id": 37,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:26:in `block in call'"
},
{
"exception_object_id": 81760,
"id": 38,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:99:in `block in tagged'"
},
{
"exception_object_id": 81760,
"id": 39,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:37:in `tagged'"
},
{
"exception_object_id": 81760,
"id": 40,
"trace": "activesupport (6.1.4.7) lib/active_support/tagged_logging.rb:99:in `tagged'"
},
{
"exception_object_id": 81760,
"id": 41,
"trace": "railties (6.1.4.7) lib/rails/rack/logger.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 42,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'"
},
{
"exception_object_id": 81760,
"id": 43,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/request_id.rb:26:in `call'"
},
{
"exception_object_id": 81760,
"id": 44,
"trace": "rack (2.2.4) lib/rack/runtime.rb:22:in `call'"
},
{
"exception_object_id": 81760,
"id": 45,
"trace": "activesupport (6.1.4.7) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'"
},
{
"exception_object_id": 81760,
"id": 46,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/executor.rb:14:in `call'"
},
{
"exception_object_id": 81760,
"id": 47,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/static.rb:24:in `call'"
},
{
"exception_object_id": 81760,
"id": 48,
"trace": "rack (2.2.4) lib/rack/sendfile.rb:110:in `call'"
},
{
"exception_object_id": 81760,
"id": 49,
"trace": "actionpack (6.1.4.7) lib/action_dispatch/middleware/host_authorization.rb:119:in `call'"
},
{
"exception_object_id": 81760,
"id": 50,
"trace": "rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'"
},
{
"exception_object_id": 81760,
"id": 51,
"trace": "railties (6.1.4.7) lib/rails/engine.rb:539:in `call'"
},
{
"exception_object_id": 81760,
"id": 52,
"trace": "puma (4.3.12) lib/puma/configuration.rb:228:in `call'"
},
{
"exception_object_id": 81760,
"id": 53,
"trace": "puma (4.3.12) lib/puma/server.rb:727:in `handle_request'"
},
{
"exception_object_id": 81760,
"id": 54,
"trace": "puma (4.3.12) lib/puma/server.rb:476:in `process_client'"
},
{
"exception_object_id": 81760,
"id": 55,
"trace": "puma (4.3.12) lib/puma/server.rb:332:in `block in run'"
},
{
"exception_object_id": 81760,
"id": 56,
"trace": "puma (4.3.12) lib/puma/thread_pool.rb:134:in `block in spawn_thread'"
}
]
}
}
这对调试应用程序非常有帮助。
有没有办法返回像这样的完整错误,以及我的自定义错误消息(但不是在生产中)?
谢谢!
答: 暂无答案
评论
debug
rescue StandardError => e; Rails.development? ? raise e : render status: 400, json: { message: e.to_s }