c72910a8bf
In case we rescue from a fatal error, we want the error and the backtrace to the error logged, so we can debug later on. This change injects the configured logger from the rails app to the grape API and logs error as well as backtrace in a rails-like fashion.
36 lines
1 KiB
Ruby
36 lines
1 KiB
Ruby
Dir["#{Rails.root}/lib/api/*.rb"].each {|file| require file}
|
|
|
|
module Gitlab
|
|
class API < Grape::API
|
|
version 'v3', using: :path
|
|
|
|
rescue_from ActiveRecord::RecordNotFound do
|
|
rack_response({'message' => '404 Not found'}.to_json, 404)
|
|
end
|
|
|
|
rescue_from :all do |exception|
|
|
# lifted from https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb#L60
|
|
# why is this not wrapped in something reusable?
|
|
trace = exception.backtrace
|
|
|
|
message = "\n#{exception.class} (#{exception.message}):\n"
|
|
message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code)
|
|
message << " " << trace.join("\n ")
|
|
|
|
API.logger.add Logger::FATAL, message
|
|
rack_response({'message' => '500 Internal Server Error'}, 500)
|
|
end
|
|
|
|
format :json
|
|
error_format :json
|
|
helpers APIHelpers
|
|
|
|
mount Users
|
|
mount Projects
|
|
mount Issues
|
|
mount Milestones
|
|
mount Session
|
|
mount MergeRequests
|
|
mount Notes
|
|
end
|
|
end
|