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.

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


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

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"

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

The handler is called with several arguments:

Inside the handler, you can: