Скажи Мербу, чтобы не было тайм-аута - PullRequest
0 голосов
/ 10 февраля 2010

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

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

- ОБНОВЛЕНИЕ -

Похоже, что ублюдок за merb вызывает ошибку. Есть ли способ изменить время ожидания mongrel с помощью merb?

1 Ответ

1 голос
/ 10 февраля 2010

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

Некоторые подходы для длительных задач состоят в том, чтобы либо использовать 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 вызывается, я извлекаю информацию о прогрессе из базы данных и возвращаю ее вызывающему процессу.

...