Скажи Мербу, чтобы он не истекал

После публикации вопроса, связанного с nginx, я продолжаю свои исследования: проблема в том, что время ожидания оболочки merb составляет примерно 30 секунд. Если я скажу базовому nginx-серверу не делать тайм-аут, Merb сделает это, и я не смогу найти способ сказать, что нет; Мне нужно делать запросы, которые занимают до нескольких минут.

Есть намеки? Большое спасибо.

-- ОБНОВИТЬ --

Кажется, что шавка за Merb вызывает ошибку. Есть ли какой-нибудь способ изменить таймаут монгрела, работающий с merb?

1 ответ

Возможно, другой подход даст лучшие результаты - вместо того, чтобы обойти тайм-ауты, как насчет максимизации пропускной способности путем отсрочки выполнения задачи?

Некоторые подходы для долгосрочных задач состоят в том, чтобы либо использовать run_later, либо выполнить отдельный рабочий процесс для выполнения задачи...

def run_in_background(r)
    Thread.new do
        response = IO.popen(r) do |f|
            f.read
        end
    end
end

В обоих случаях вы должны вернуть 202 (Принятый) в качестве кода состояния и URL-адрес, по которому вызывающее приложение может получать обновления статуса.

Я использую этот подход для обработки запросов, которые вызывают выполнение фоновых пакетных процессов. Каждый записывает в базу данных свое время начала, прогресса и завершения (вы можете легко использовать файл). Когда URL вызывается, я извлекаю информацию о прогрессе из базы данных и возвращаю ее вызывающему процессу.

Другие вопросы по тегам