Error Handling

You can configure your schema to rescue application errors during field resolution. Errors during batch loading will also be rescued.

Note: This feature is for class-based schemas using the interpreter runtime only. For .define-based schemas, use exAspArk/graphql-errors instead.

Thanks to [@exAspArk] for the graphql-errors gem which inspired this behavior and @thiago-sydow who suggested and implementation like this.

Setup

Add error handling to your schema with use GraphQL::Execution::Errors. (This will be the default in a future graphql-ruby version.)

class MySchema < GraphQL::Schema
  # Use the new runtime & analyzers:
  use GraphQL::Execution::Interpreter
  use GraphQL::Analysis::AST
  # Also use the new error handling:
  use GraphQL::Execution::Errors
end

Add error handlers

Handlers are added with rescue_from configurations in the schema:

class MySchema < GraphQL::Schema
  # ...

  rescue_from(ActiveRecord::RecordNotFound) do |err, obj, args, ctx, field|
    # Raise a graphql-friendly error with a custom message
    raise GraphQL::ExecutionError, "#{field.type.unwrap.graphql_name} not found"
  end

  rescue_from(SearchIndex::UnavailableError) do |err, obj, args, ctx, field|
    # Log the error
    Bugsnag.notify(err)
    # replace it with nil
    nil
  end
end

The handler is called with several arguments:

Inside the handler, you can: