CHỈNH SỬA:
-
Sử dụng ActiveRecord::Base.connections.exec_query()
xa như tôi có thể nói NHIỀU cách tiếp cận tốt hơn chỉ vì nó trả về một mảng băm như người ta mong đợi, ActiveRecord::Base.connections.execute
không làm.
-
Vui lòng đọc bản chỉnh sửa ở trên, tôi để phần bên dưới để tham khảo.
Mặc dù tôi nhận ra câu hỏi này khá cũ và vì các liên kết mà ohho đã đăng có 404'd, nên gần đây tôi đã gặp lỗi tương tự.
Tôi đã có thể sửa nó bằng cách làm như sau:
result = ActiveRecord::Base.connection.execute("call example_proc()")
ActiveRecord::Base.clear_active_connections!
Khi bạn đã xóa các kết nối, bạn có thể chạy bất kỳ truy vấn nào khác mà như trước đây, truy vấn không thành công khi cố gắng truy cập cơ sở dữ liệu thông qua đường ray hoặc một proc được lưu trữ khác.
http://apidock.com/rails/v3.2.13 / ActiveRecord / Base / clear_active_connections% 21 / class
--EDIT:
Cũng cần nhắc lại rằng người ta không nên lưu trữ kết nối ActiveRecord trong một biến theo bài đăng của người cho thuê trên liên kết
"Đừng lưu vào bộ nhớ cache!
Không lưu trữ kết nối trong một biến vì một chuỗi khác có thể cố gắng sử dụng nó khi nó đã được đăng nhập lại vào nhóm kết nối. Xem: 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)