MODIF :
--
Utilisation de ActiveRecord::Base.connections.exec_query()
est pour autant que je puisse en dire BEAUCOUP meilleure approche simplement parce qu'elle renvoie un tableau de hachages comme on pourrait s'y attendre, ce qui ActiveRecord::Base.connections.execute
ne fait pas.
--
Veuillez lire la modification ci-dessus, je laisse ci-dessous pour référence.
Bien que je réalise que cette question est assez ancienne et parce que les liens publiés par ohho ont 404'd, j'ai eu cette même erreur récemment.
J'ai pu le réparer en procédant comme suit :
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Une fois que vous avez effacé les connexions, vous pouvez exécuter toute autre requête où, comme auparavant, elle aurait échoué en essayant d'accéder à la base de données via des rails ou une autre procédure stockée.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/classe
--EDIT :
Il convient également de mentionner qu'il ne faut pas stocker la connexion ActiveRecord dans une variable selon le message de leente sur ce lien
"Ne le cachez pas !
Ne stockez pas une connexion dans une variable, car un autre thread pourrait essayer de l'utiliser alors qu'il est déjà réenregistré dans le pool de connexions. Voir :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)