Возможно, другой подход даст лучшие результаты - вместо того, чтобы обойти тайм-ауты, как насчет максимизации пропускной способности путем отсрочки выполнения задачи?
Некоторые подходы для длительных задач состоят в том, чтобы либо использовать run_later или exec отдельный рабочий процесс для выполнения задачи ...
def run_in_background(r)
Thread.new do
response = IO.popen(r) do |f|
f.read
end
end
end
В обоих случаях вы должны вернуть 202 (Принято) в качестве кода состояния и URL-адрес, по которому вызывающее приложение может получать обновления статуса.
Я использую этот подход для обработки запросов, которые вызывают выполнение фоновых пакетных процессов. Каждый записывает в базу данных свое время начала, хода выполнения и завершения (вы можете легко использовать файл). Когда URL вызывается, я извлекаю информацию о прогрессе из базы данных и возвращаю ее вызывающему процессу.