BEWERKEN:
--
ActiveRecord::Base.connections.exec_query()
gebruiken is voor zover ik kan zien een VEEL betere benadering alleen omdat het een array van hashes retourneert zoals men zou verwachten, die ActiveRecord::Base.connections.execute
doet niet.
--
Lees de bewerking hierboven, ik laat de onderstaande voor referentie.
Hoewel ik me realiseer dat deze vraag vrij oud is en omdat de geposte links 404'd hebben, had ik onlangs dezelfde fout.
Ik heb het kunnen oplossen door het volgende te doen:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Zodra u de verbindingen hebt gewist, kunt u andere query's uitvoeren waar het niet zou zijn gelukt om toegang te krijgen tot de database via rails of een ander opgeslagen proces.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDIT:
Het is ook vermeldenswaard dat men de ActiveRecord-verbinding niet in een variabele moet opslaan, zoals per leente's post op deze link
"Niet cachen!
Sla een verbinding niet op in een variabele, omdat een andere thread deze mogelijk probeert te gebruiken wanneer deze al weer is ingecheckt in de verbindingspool. Zie: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)