У меня есть приложение Rails, которое, к сожалению, после запроса к контроллеру должно выполнить некоторое перехват, который занимает некоторое время. Каковы лучшие практики в Rails для обеспечения обратной связи или прогресса в выполнении долгосрочной задачи или запроса? Эти методы контроллера обычно длятся более 60 секунд.
Меня не интересует клиентская сторона ... Я планировал получать Ajax-запрос каждую секунду или около того и отображать индикатор прогресса. Я просто не уверен в лучшей практике Rails, я создаю дополнительный контроллер? Есть ли что-нибудь умное, что я могу сделать? Я хочу, чтобы ответы были сосредоточены на стороне сервера с использованием только Rails.
Заранее спасибо за помощь.
Edit:
Если это имеет значение, запрос http для PDF-файлов. Затем я использую Rails вместе с Ruport для создания этих PDF-файлов. Проблема в том, что эти PDF-файлы очень большие и содержат много данных. Имеет ли смысл использовать фоновую задачу? Давайте предположим, что в среднем PDF занимает от одной минуты до двух минут, из-за этого мое приложение Rails не будет отвечать на любые другие запросы сервера в течение этого времени?
Редактировать 2:
Хорошо, после дальнейшего изучения кажется, что мое Rails-приложение действительно не отвечает ни на какие другие HTTP-запросы после поступления запроса на большой PDF. Итак, я предполагаю, что теперь возникает вопрос: какой механизм потоков / фона лучше всего использовать? Он должен быть стабильным и поддерживаемым. Я очень удивлен, что в Rails нет чего-то подобного.
Редактировать 3:
Я прочитал эту страницу: http://wiki.rubyonrails.org/rails/pages/HowToRunBackgroundJobsInRails. Я хотел бы прочитать о различных опытах с этими инструментами.
Редактировать 4:
Я использую "modrails" Passenger Phusion, если это имеет значение.
Редактировать 5:
Я использую 64-битную Windows Vista для своей машины для разработки; тем не менее, моя производственная машина - Ubuntu 8.04 LTS. Стоит ли переходить на Linux для моей машины для разработки? Будут ли представленные решения работать на обоих?