testons actuellement le code suivant:Impossible d'attraper mysql2 :: erreur dans Rails
def db_check
begin
schema_call = ActiveRecord::Base.establish_connection(
:adapter => 'mysql2',
:host => 'localhost',
:database => 'dev_db',
:username => 'dev_user',
:password => 'dev_pw').connection.execute("SELECT * FROM schema_migrations LIMIT 1")
if schema_call
render :status => 200, :file => "public/success.html"
else
render :status => 500, :file => "public/query_fail.html"
end
rescue Exception => e
puts "#{e.class} ;; #{e.message}"
logger.debug "#{e.class}"
render :status => 500, :file => "public/500.html"
end
end
L'objectif final est d'avoir un appel à un serveur MySQL pour voir si 1) le serveur est toujours et 2) si la base de données est disponible Si la connexion ne fonctionne pas, une erreur est lancée, donc je mets le code dans un bloc rescue
. Malheureusement, même lorsque j'utilise rescue Exception
, ce que je comprends pour être déconseillé, je reçois toujours un message Mysql2 :: Error dans le navigateur (j'ai également essayé de sauvetage Mysql2:Error
, qui n'a eu aucun effet).
La duplication de la journalisation des erreurs dans le rescue
est une tentative supplémentaire d'obtenir des informations supplémentaires, mais rien n'a fonctionné jusqu'à présent. Quelqu'un sait comment attraper cette erreur?
MISE À JOUR: aussi, pour le contexte, d'essai le code avec MySQL ne fonctionne pas actuellement (état si le serveur DB est en panne), retournez les éléments suivants:
Mysql2::Error Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
ce qui est logique partielle, étant donné le serveur est éteint, mais je ne comprends toujours pas pourquoi il ne sauve pas l'erreur.
Alors, y a-t-il un moyen d'attraper de telles erreurs? – cyrilchampier
Sérieusement - il doit y avoir un moyen de sauver cela. –
@TJ Biddle: L'exemple 'begin rescue' de IanL fonctionne pour capturer ma' MySQL2 :: Error ... la contrainte de clé étrangère échoue'. Je vérifie qu'une contrainte de clé étrangère existe du côté de la base de données en utilisant rspec qui fonctionne maintenant. Merci Ian. – Chris