无法在Rails中捕获Mysql2 :: Error

时间:2013-03-08 15:55:50

标签: ruby-on-rails ruby

目前正在测试以下代码:

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)
鉴于服务器已关闭,

部分有意义,但我仍然不明白为什么它不能解决错误。

1 个答案:

答案 0 :(得分:2)

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