当前正在测试以下代码:

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/

10-14 05:49