sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo llamar al procedimiento almacenado MySQL desde Rails?

EDITAR:

--

Usando ActiveRecord::Base.connections.exec_query() es por lo que puedo decir un MUCHO mejor enfoque solo porque devuelve una matriz de hashes como cabría esperar, que ActiveRecord::Base.connections.execute no es.

Documentación

--

Por favor, lea la edición anterior, dejo la siguiente como referencia.

Si bien me doy cuenta de que esta pregunta es bastante antigua y debido a que los enlaces que ohho publicó tienen 404, tuve este mismo error recientemente.

Pude arreglarlo haciendo lo siguiente:

result = ActiveRecord::Base.connection.execute("call example_proc()") ActiveRecord::Base.clear_active_connections!

Una vez que haya borrado las conexiones, puede ejecutar cualquier otra consulta en la que, como antes, hubiera fallado al intentar acceder a la base de datos a través de Rails u otro proceso almacenado.

http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/clase

--EDITAR:

También vale la pena mencionar que no se debe almacenar la conexión ActiveRecord en una variable según la publicación de leente en este enlace

"¡No lo guardes en caché!

No almacene una conexión en una variable, porque otro subproceso podría intentar usarla cuando ya se haya registrado nuevamente en el grupo de conexiones. Ver: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)