EDIT:
--
Använder ActiveRecord::Base.connections.exec_query()
är så vitt jag kan säga MYCKET bättre tillvägagångssätt bara för att den returnerar en uppsättning hash som man kan förvänta sig, som ActiveRecord::Base.connections.execute
gör inte.
--
Vänligen läs redigeringen ovan, jag lämnar nedanstående som referens.
Även om jag inser att den här frågan är ganska gammal och eftersom länkarna ohho postade har 404'd, hade jag samma fel nyligen.
Jag kunde fixa det genom att göra följande:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
När du har rensat anslutningar kan du köra andra frågor där det som tidigare skulle ha misslyckats när du försökte komma åt databasen via rails eller annan lagrad proc.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDIT:
Det är också värt att nämna att man inte bör lagra ActiveRecord-anslutningen i en variabel enligt leentes inlägg på denna länk
"Cachelagra det inte!
Lagra inte en anslutning i en variabel, eftersom en annan tråd kan försöka använda den när den redan har checkats in i anslutningspoolen igen. Se: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)