Tôi muốn đạt được các hành vi sau đây trong hành động điều khiển của tôi mà không có việc sử dụng mô-đun Timeout:Làm thế nào để đáp ứng yêu cầu Rails trong vòng một thời gian chờ có thể cấu hình
class AdminController < ApplicationController
def example
Timeout.timeout(params[:timeout].to_i) do
... # try to process the request within params[:timeout] seconds
end
rescue Timeout::Error
render nothing: true, status: :gateway_timeout
end
end
Tôi muốn tránh việc sử dụng Timeout bởi vì nó gây ra nhiều lỗi trong ứng dụng của tôi, bao gồm rò rỉ kết nối cơ sở dữ liệu. Một số vấn đề khác được báo cáo tại: http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/
bạn đang thực sự làm gì trong yêu cầu này? Thời gian chờ là giải pháp kém cho vấn đề lớn hơn - bạn có thể tiền xử lý hoặc chuyển đổi một số mã đó thành công việc hoặc thậm chí tách một yêu cầu thành nhiều giai đoạn với máy trạng thái. – court3nay
@ court3nay Đó là một dịch vụ web chạy các công việc có thể mất từ 100ms đến 30 giây để được xử lý. Mỗi khách hàng có thể chỉ định thời gian chờ có thể chấp nhận của riêng họ cho các công việc được yêu cầu. – barbolo
@barbolo mã hiện tại của bạn có lỗi. Tốt nhất là hãy kết thúc thời gian chờ bên trong một khối 'bắt đầu', tiếp theo là' rescue => e'. Những gì bạn đang cố gắng để đạt được? Dừng yêu cầu nếu truy vấn mất quá nhiều thời gian? – onebree