編集:
-
ActiveRecord::Base.connections.exec_query()
を使用する 私がたくさんを言うことができる限りです ActiveRecord::Base.connections.execute
が期待するようにハッシュの配列を返すという理由だけで、より良いアプローチです。 ではない。
-
上記の編集をお読みください。参考のために以下を残しておきます。
この質問はかなり古いものであり、ohhoが投稿したリンクは404であるため、最近同じエラーが発生しました。
次のようにして修正することができました:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
接続をクリアすると、Railsまたは別のストアドプロシージャを介してデータベースにアクセスしようとして失敗した場合と同様に、他のクエリを実行できます。
http://apidock.com/rails/v3.2.13 / ActiveRecord / Base / clear_active_connections%21 / class
-編集:
この
「キャッシュしないでください!
接続を変数に格納しないでください。接続プールに既にチェックインされているときに、別のスレッドが接続を使用しようとする可能性があります。参照: ConnectionPool "
connection = ActiveRecord::Base.connection #WRONG
threads = (1..100).map do
Thread.new do
begin
10.times do
connection.execute("SELECT SLEEP(1)") # WRONG
ActiveRecord::Base.connection.execute("SELECT SLEEP(1)") # CORRECT
end
puts "success"
rescue => e
puts e.message
end
end
end
threads.each(&:join)