Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie rufe ich eine gespeicherte MySQL-Prozedur von Rails aus auf?

BEARBEITEN:

--

Verwenden von ActiveRecord::Base.connections.exec_query() ist, soweit ich das beurteilen kann, ein VIEL besserer Ansatz, nur weil es ein Array von Hashes zurückgibt, wie man es erwarten würde, was ActiveRecord::Base.connections.execute ist nicht.

Dokumentation

--

Bitte lesen Sie die Bearbeitung oben, ich lasse die unten als Referenz stehen.

Obwohl mir klar ist, dass diese Frage ziemlich alt ist und weil die Links, die ohho gepostet hat, 404 sind, hatte ich kürzlich denselben Fehler.

Ich konnte es folgendermaßen beheben:

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

Sobald Sie die Verbindungen getrennt haben, können Sie alle anderen Abfragen ausführen, bei denen es wie zuvor beim Versuch, über Rails oder eine andere gespeicherte Prozedur auf die Datenbank zuzugreifen, fehlgeschlagen wäre.

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

--BEARBEITEN:

Es ist auch erwähnenswert, dass man die ActiveRecord-Verbindung nicht in einer Variablen speichern sollte, wie in Leentes Beitrag zu diesem verlinken

"Nicht zwischenspeichern!

Speichern Sie eine Verbindung nicht in einer Variablen, da ein anderer Thread versuchen könnte, sie zu verwenden, wenn sie bereits wieder in den Verbindungspool eingecheckt ist. Siehe: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)