Ruby Grape rescue_from:所有人都无法解救所有错误

时间:2014-02-19 05:31:53

标签: ruby grape

我的Grape应用有几个错误处理程序,最后包括:

rescue_from :all, backtrace: true do |e|
  message = { errors: { all: e.message } }
  rack_response(format_message(message, e.backtrace), 500 )
end

但这至少不能挽救Grape用

处理的错误
throw :error

内部。我如何挽救这些错误?所记录的特定错误是"请求的格式' txt'不受支持"和"未找到:some_path"。如果格式扩展程序丢失或只有“'”,则会出现这些错误。分别提供。

1 个答案:

答案 0 :(得分:1)

你没有拯救抛出的条件。他们将直接进入错误处理程序,因为rescue用于raise d错误,而不是抛出条件。 throw不会创建与raise完全相同的对象,也无法以相同的方式处理。

但是,您可以使用error_formatter 格式化错误消息:

module CustomErrorFormatter
  def self.call message, backtrace, options, env
     { errors: { all: message.to_s } }.to_json
  end
end

在主应用程序中:

error_formatter :json, CustomErrorFormatter