当前正在测试以下代码:
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
最终的目标是调用mysql服务器,查看1)服务器是否仍在运行,2)数据库是否可用。如果连接不起作用,就会抛出一个错误,因此我将代码放在
rescue
块中。不幸的是,即使我使用了rescue Exception
(我知道这是被建议的),我仍然在浏览器中收到Mysql2::错误消息(我也尝试了rescueMysql2:Error
,但没有效果)。在
rescue
中重复错误日志记录是为了获得额外的信息,但到目前为止没有任何效果有人知道如何抓住这个错误吗?更新:另外,对于其他上下文,使用当前未运行的MySQL测试代码(如果DB服务器关闭,则返回以下内容):
mysql2::错误
无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地mysql服务器
考虑到服务器已经关闭,这是部分有意义的,但我仍然不明白为什么它没有挽救错误。
最佳答案
rescue
没有捕获mysql2::错误的原因是,错误不是来自activerecord::基本代码,而是rails抛出了一个错误,因为它无法连接到它期望的mysql服务器(我已经关闭了该服务器来测试上述代码)。
关于ruby-on-rails - 无法在Rails中捕获Mysql2::Error,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15298035/