Pular para o conteúdo principal
Aplicações Grape são oficialmente suportadas. Instrumentar aplicações Grape requer alguma configuração manual. Siga os passos de instalação no AppSignal, começando por clicar em ‘Add app’ na tela de contas.
Sua aplicação está usando uma combinação de Rails, Grape, Hanami, Padrino ou Sinatra? Siga nosso guia sobre instrumentação de múltiplas aplicações Rack.

Instalação

Este guia de instalação é para a gem Ruby 3.12 e mais novas. Para aplicações usando uma gem AppSignal for Ruby mais antiga, siga nosso guia de instalação legado.
Após instalar e configurar a gem AppSignal, adicione a integração AppSignal depois que o app Grape for carregado. A integração com Grape é requerida pela gem Ruby do AppSignal e os middlewares de event e instrumentation são adicionados nos exemplos de código a seguir.
# config.ru
require "appsignal" # Adicione este require

# Carrega a integração com Grape
Appsignal.load(:grape)

# Adiciona o middleware Rack EventMiddleware do AppSignal
# Requer a gem AppSignal for Ruby 4.7+
use Appsignal::Rack::EventMiddleware

# Requer o app
require_relative "api"

# Inicia o AppSignal
Appsignal.start

# Inicia o app
run Acme::API
O próximo passo é adicionar o middleware do AppSignal à classe API base da aplicação. Ele reportará qualquer exception não tratada da aplicação.
# api.rb

module Acme
  class API < Grape::API
    # Adicione esta linha
    insert_before Grape::Middleware::Error, Appsignal::Rack::GrapeMiddleware # Inclua este middleware

    # ...
  end
end

Instalação legada

Aplicações usando a gem AppSignal for Ruby 3.11 ou mais antiga, sigam estes passos para instalar o AppSignal em aplicações Grape. A integração com Grape é requerida pela gem Ruby do AppSignal e os middlewares de event handler e instrumentation são adicionados nos exemplos de código a seguir.
# config.ru
require "appsignal/integrations/grape" # Adicione este require

# Configura o AppSignal
Appsignal.config = Appsignal::Config.new(
  Dir.pwd,        # A raiz do seu app
  ENV["RACK_ENV"] # O ambiente do seu app (development/production)
)
# Inicia o AppSignal
Appsignal.start_logger # Não é necessário na gem Ruby 3.9.3+
Appsignal.start

# Adiciona o Rack EventHandler do AppSignal
# Requer a gem AppSignal for Ruby 3.8+
use ::Rack::Events, [Appsignal::Rack::EventHandler.new]

# Requer o app
require_relative "api"

# Inicia o app
run Acme::API
O próximo passo é adicionar o middleware do AppSignal à classe API base da aplicação. Ele reportará qualquer exception não tratada da aplicação.
# api.rb

module Acme
  class API < Grape::API
    # Adicione esta linha
    insert_before Grape::Middleware::Error, Appsignal::Grape::Middleware # Inclua este middleware

    # ...
  end
end

Apps Grape montados

Montar aplicações Grape em aplicações Ruby on Rails é suportado. A gem Ruby precisa estar em uma versão recente para instrumentar adequadamente as requisições para apps Grape montados.

Ignorando erros

Para ignorar um erro específico do Grape, defina a flag grape.skip_appsignal_error no environment da requisição. Definir essa flag como true instruirá o AppSignal a não reportar nenhum erro durante a requisição. Use esta flag apenas se você precisa ignorar erros de uma aplicação Grape dinamicamente. Especifique classes de erro na opção ignore_errors para ignorá-las em toda a aplicação. Para mais informações sobre como silenciar notificações para erros específicos, veja nossa documentação de notification settings.
get "/" do
  env["grape.skip_appsignal_error"] = true # Adicione esta linha em um endpoint ou callback
  raise "uh oh" # Erro de exemplo, não copie isto
end

Reportando erros do rescue_from

Se um erro é resgatado no app usando rescue_from, o AppSignal não o receberá nem o rastreará. Para ainda reportar o erro, chame Appsignal.report_error no bloco rescue_from. (Use o helper Appsignal.set_error ao usar a gem Ruby versão 3 ou mais antiga.)
class Api < ::Grape::API
  insert_before Grape::Middleware::Error, Appsignal::Grape::Middleware

  format :json

  rescue_from :all do |error|
    Appsignal.report_error(error)
    error!({ :error => "error message" }.to_json, 500)
  end
end