目前正在测试以下代码:
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 :: Error 消息(我也尝试过救援Mysql2:Error
,这没有效果。)
rescue
中的错误记录重复是获取其他信息的额外尝试,但到目前为止还没有任何工作。任何人都知道如何捕获此错误?
更新:另外,对于其他上下文,使用当前未运行的MySQL测试代码(如果数据库服务器已关闭,则为条件),请返回以下内容:
Mysql2::Error Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)鉴于服务器已关闭,
部分有意义,但我仍然不明白为什么它不能解决错误。
答案 0 :(得分:2)
rescue
未捕获 Mysql2 :: Error 的原因是该错误不是来自 ActiveRecord :: Base 代码,而是Rails抛出一个错误,因为它无法连接到它期望的MySQL服务器(我已经关闭以测试上面的代码)。