2

目前正在测试以下代码:

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消息(我也尝试了 rescue Mysql2:Error,但没​​有效果)。

错误记录的重复rescue是额外尝试获取更多信息以使用,但到目前为止没有任何效果。任何人都知道如何捕捉这个错误?

更新:另外,对于其他上下文,使用当前未运行的 MySQL 测试代码(如果数据库服务器关闭的条件),请返回以下内容:

Mysql2::错误
无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)

考虑到服务器已关闭,这具有部分意义,但我仍然不明白为什么它不能挽救错误。

4

1 回答 1

2

rescue没有捕获Mysql2::Error的原因是错误不是来自ActiveRecord::Base代码,而是 Rails 抛出错误,因为它无法连接到它期望的 MySQL 服务器(我已经关闭以测试上面的代码)。

于 2013-03-08T16:20:19.747 回答