MODIFICA:
--
Utilizzando ActiveRecord::Base.connections.exec_query()
è per quanto posso dire un MOLTO approccio migliore solo perché restituisce una matrice di hash come ci si aspetterebbe, che ActiveRecord::Base.connections.execute
non.
--
Leggi la modifica sopra, lascio quanto segue come riferimento.
Anche se mi rendo conto che questa domanda è piuttosto vecchia e poiché i collegamenti pubblicati da ohho hanno 404'd, di recente ho riscontrato lo stesso errore.
Sono stato in grado di risolverlo procedendo come segue:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Dopo aver cancellato le connessioni, puoi eseguire qualsiasi altra query dove, come prima, non sarebbe riuscito ad accedere al database tramite binari o un altro processo memorizzato.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDIT:
Vale anche la pena ricordare che non si dovrebbe memorizzare la connessione ActiveRecord in una variabile come da post di leente su questo collegamento
"Non memorizzarlo nella cache!
Non archiviare una connessione in una variabile, perché un altro thread potrebbe tentare di utilizzarla quando è già stato archiviato di nuovo nel pool di connessioni. Vedi: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)