EDIT:
--
Brug af ActiveRecord::Base.connections.exec_query()
er så vidt jeg kan sige MEGET bedre tilgang, bare fordi den returnerer en række hashes, som man kunne forvente, som ActiveRecord::Base.connections.execute
gør ikke.
--
Læs venligst redigeringen ovenfor. Jeg efterlader nedenstående som reference.
Mens jeg er klar over, at dette spørgsmål er ret gammelt, og fordi de links, ohho har lagt ud, har 404'd, havde jeg den samme fejl for nylig.
Jeg var i stand til at rette det ved at gøre følgende:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Når du har ryddet forbindelser, kan du køre alle andre forespørgsler, hvor det som før ville have mislykkedes ved at forsøge at få adgang til databasen gennem skinner eller en anden lagret proc.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDIT:
Det er også værd at nævne, at man ikke bør gemme ActiveRecord-forbindelsen i en variabel som pr. leentes indlæg på denne link
"Lad være med at cache det!
Gem ikke en forbindelse i en variabel, fordi en anden tråd måske forsøger at bruge den, når den allerede er tjekket ind i forbindelsespuljen 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)