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 が現在実行されていない状態でコードをテストすると (DB サーバーがダウンしている場合)、次の結果が得られます。

Mysql2::エラー
ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できない (2)

サーバーがオフになっていることを考えると、これは部分的に理にかなっていますが、なぜエラーが解決されないのかまだわかりません。

4

1 に答える 1

2

Mysql2 :: Errorrescueがキャッチされない理由は、エラーがActiveRecord :: Baseコードから発生しているのではなく、Railsが予期するMySQLサーバーに接続できないためにエラーをスローしているためです(上記のコードをテストするためにオフにしました)。

于 2013-03-08T16:20:19.747 に答える