Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como chamar o procedimento armazenado do MySQL do Rails?


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)