EDITAR:
--
Usando
ActiveRecord::Base.connections.exec_query()
é até onde posso dizer um MUITO melhor abordagem apenas porque ele retorna uma matriz de hashes como seria de esperar, que ActiveRecord::Base.connections.execute
não. Documentação
--
Por favor, leia a edição acima, estou deixando abaixo para referência.
Embora eu perceba que essa pergunta é bastante antiga e porque os links ohho postados têm 404'd, tive esse mesmo erro recentemente.
Consegui resolver fazendo o seguinte:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Depois de limpar as conexões, você pode executar qualquer outra consulta onde antes teria falhado ao tentar acessar o banco de dados por meio de trilhos ou outro proc armazenado.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--EDITAR:
Vale ressaltar também que não se deve armazenar a conexão ActiveRecord em uma variável conforme post de leente neste ligação
"Não armazene em cache!
Não armazene uma conexão em uma variável, porque outro encadeamento pode tentar usá-la quando já tiver feito check-in no pool de conexões. Consulte: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)