РЕДАКТИРАНЕ:
--
Използване на ActiveRecord::Base.connections.exec_query()
е, доколкото мога да кажа, доМНОГО по-добър подход, само защото връща масив от хешове, както може да се очаква, които ActiveRecord::Base.connections.execute
не.
--
Моля, прочетете редакцията по-горе, оставям по-долу за справка.
Въпреки че осъзнавам, че този въпрос е доста стар и тъй като връзките, публикувани от ohho, имат 404, имах същата грешка наскоро.
Успях да го поправя, като направих следното:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
След като изчистите връзките, можете да изпълнявате всякакви други заявки, при които както преди, опитът за достъп до базата данни през релсите или друг съхранен процес би бил неуспешен.
http://apidock.com/rails/v3.2.13 /ActiveRecord/Base/clear_active_connections%21/class
--РЕДАКТИРАНЕ:
Също така си струва да се спомене, че не трябва да съхранявате връзката ActiveRecord в променлива според публикацията на leente в този връзка
„Не го кеширайте!
Не съхранявайте връзка в променлива, защото друга нишка може да се опита да я използва, когато вече е регистрирана обратно в пула за връзки. Вижте: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)