EDIT:
Использование ActiveRecord::Base.connections.exec_query()
, насколько я могу сказать, MUCH лучший подход только потому, что он возвращает массив хэшей, как и следовало ожидать, чего не делает ActiveRecord::Base.connections.execute
.
Документация
Пожалуйста, прочитайте изменения выше, я оставляю ниже для справки.
Хотя я понимаю, что этот вопрос довольно старый и из-за того, что ссылки, которые были опубликованы в ohho, имеют 404, у меня недавно была такая же ошибка.
Мне удалось это исправить, выполнив следующие действия:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
После того, как вы очистили соединения, вы можете запускать любые другие запросы, которые, как и прежде, не смогли бы получить доступ к базе данных через rails или другой сохраненный процесс.
http://apidock.com/rails/v3.2.13/ActiveRecord/Base/clear_active_connections%21/class
-
EDIT:
Стоит также упомянуть, что не следует хранить соединение 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)