2011-09-26 18 views
10

Ho trovato difficile inviare eccezioni della mia app Rails 3 tramite la gemma Airbrake. All'inizio pensavo che ci fosse un errore di configurazione di Airbrake da parte mia, ma dopo prove ed errori e leggendo la documentazione (https://github.com/thoughtbot/airbrake#readme) molto da vicino, ho scoperto che Airbrake non riportava errori quando un'applicazione è in esecuzione nell'ambiente di sviluppo. Segnala errori quando l'app è in esecuzione nell'ambiente di produzione.Come configurare la gemma Airbrake per registrare tutte le eccezioni di Rails negli ambienti di sviluppo e di produzione?

C'è un flag per generare un file di configurazione di Airbrake che include automaticamente l'ambiente di sviluppo nell'elenco di ambienti in cui le notifiche non devono essere inviate?

Attualmente sto eseguendo il comando indicato nella README

script/rails generate airbrake --api-key your_key_here 

risposta

18

Semplice.

config.consider_all_requests_local  = false 

invece di

config.consider_all_requests_local  = true 

nel vostro config/environments/development.rb. Nel mio caso, come sospetto in molti altri, è stato solo un cambiamento temporaneo, quindi posso "testare" lo notify_airbrake di Airbrake.

Si ha bisogno config.development_environments = [] in airbrake.rb

+20

Dovrei puntualizzare che in aggiunta a ** devi ** 'config.development_environments = []' in 'airbrake.rb'! –

+0

Un'altra cosa è che, per l'errore da mostrare in airbrake, deve provenire dal sottodominio che hai configurato nelle impostazioni del tuo account Airbrake (ad esempio, probabilmente non 'localhost'). Puoi usare '/ etc/hosts' per darti un dominio adatto (ad esempio dev.example.com). Questo è necessario in aggiunta alle altre due cose. – connec

14

Non sei sicuro di alcune opzioni di configurazione, ma è possibile inviare in modo esplicito le notifiche a Airbrake da un controller utilizzando

notify_airbrake(exception) 

Quindi, per fare questo in fase di sviluppo, puoi catturare tutti gli errori nel tuo application_controller, inviare una notifica e poi gestire gli errori come prima. Dai un'occhiata a rescue_from per iniziare. Questo è il modo in cui sto facendo questo per ricevere notifiche dal mio ambiente di staging (o, per essere precisi, qualsiasi ambiente diverso dallo sviluppo e test).

class ApplicationController < ActionController::Base 

    rescue_from Exception, :with => :render_error 

    private 

    def render_error(exception) 
    render :file => "#{Rails.root}/public/500.html", :layout => false, :status => 500 
    logger.error(exception) 
    notify_airbrake(exception) unless Rails.env.development? || Rails.env.test? 
    end 
end 
+1

Questo è un ottimo punto di partenza. Quando ho aggiunto un metodo rescue_from per Exception ho visto che il file 500.html è stato sottoposto a rendering e il log è stato scritto, come specificato nelle prime due righe del blocco. Sfortunatamente, notify_airbrake non ha funzionato nello sviluppo o negli ambienti predefiniti, solo in produzione (anche dopo aver rimosso la condizione a meno che). –

+0

Penso che la mia soluzione ideale risieda nella classe 'Airbrake :: Configuration', in particolare nell'oggetto' development_environments'. http://rdoc.info/github/thoughtbot/airbrake/master/Airbrake/Configuration#development_environments-instance_method –

+0

Si prega di guardare qui sotto per una risposta complementare! –

Problemi correlati