EDYTUJ:
--
Korzystanie z ActiveRecord::Base.connections.exec_query()
jest na tyle, na ile mogę powiedzieć, DUŻO lepsze podejście tylko dlatego, że zwraca tablicę skrótów, jak można by się spodziewać, które ActiveRecord::Base.connections.execute
nie.
--
Proszę przeczytać powyższą edycję, poniżej zostawiam jako odniesienie.
Chociaż zdaję sobie sprawę, że to pytanie jest dość stare, a ponieważ zamieszczone linki ohho mają 404, ostatnio miałem ten sam błąd.
Udało mi się to naprawić, wykonując następujące czynności:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Po wyczyszczeniu połączeń możesz uruchomić dowolne inne zapytania tam, gdzie, jak wcześniej, nie udałoby się uzyskać dostępu do bazy danych przez szyny lub inną zapisaną procedurę.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDYCJA:
Warto również wspomnieć, że nie należy przechowywać połączenia ActiveRecord w zmiennej, jak w poście leente na ten link
"Nie buforuj tego!
Nie przechowuj połączenia w zmiennej, ponieważ inny wątek może próbować go użyć, gdy jest już ponownie zaewidencjonowany w puli połączeń. Zobacz: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)