Comment tracker les 404 d'une application Rails ?


#1

Hello,

J’ai une application Ruby on Rails sur Heroku. Quel est le meilleur moyen de tracker les 404 du site ?

Merci :)


#2

Permet moi de poser une question bête, pourquoi veux tu tracker les 404 ?
Les robots qui tapent les pages du genre human.txt, wp-login.php, etc vont générés pas mal de bruit…

Une solution serait de monitorer les logs de l’appli, on utilise papertrail qui te permet d’aggéréger les logs de plusieurs machines (ou dynos) puis de configurer des alertes ou faire des recherches sur tes logs.
Il y a peut être une meilleur solution…


#3

L’idée est de tracker les 404 pertinentes (pages supprimées ou déplacées par exemple) afin de mettre en place des redirections ou autres.


#4

Tu peux le faire depuis Google Analytics, peu importe la techno :


#5

Si tu veux le faire depuis ruby, un moyen pas trop compliqué :

dans routes.rb, mettre en dernière ligne :

match "*path", to: "application#catch_all_404", via: :all

et dans application_controller.r :

def catch_all_404
  p "404 : #{request.url}" # Ce qui te permet d'aller retrouver dans les logs facilement avec des solutions comme papertrail ou logentries que Vincent a déjà mentionné
  
  # sans oublier de répondre, évidemment
  respond_to do |format|
    format.html { render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found }
    format.xml  { head :not_found }
  end
end

Si les logs ne conviennent pas, tu peux remplacer le puts par un insert en base ou un envoi de mail à l’admin pour spammer sa boite mail :)


#6

Il y a plusieurs possibilités pour cela, certaines ont déjà été évoquées comme Google Analytics.

Sinon les services comme newrelic.com ou rollbar.com permettent via des gems de traquer les erreurs d’une application Rails dont les 404.

Autre possibilité, exploiter les logs du serveur web (apache, nginx ou autre) afin de détecter les erreurs 404.