Rails / Passenger / Unknown Type Content - PullRequest
1 голос
/ 16 апреля 2009

У нас следующая ситуация:

  1. Мы вызываем URL, который запускает действие в контроллере. Действие выполняется довольно долго - оно создает большую строку XML, генерирует PDF-файл и должно быть перенаправлено по завершении.

  2. Примерно через 60 секунд браузер получает 200, но с типом контента "application / x-unknown-content-type" нет тела и нет заголовков ответа (используя Tamper для просмотра заголовков)

  3. Действие контроллера фактически продолжает выполняться до завершения, создавая PDF

Это происходит в нашей среде prod, при выполнении действия контроллера выполняется до конца, перенаправляя, как и ожидалось.

Есть предложения, где искать?

Мы запускаем Rails 2.2.2 на Apache / Phusion Passenger.

Спасибо

Ответы [ 2 ]

1 голос
/ 09 мая 2009

Я бы подумал о том, чтобы перенести эту задачу в очередь заданий и немедленно вернуться, а не оставлять пользователя сидеть и ждать. В противном случае вы столкнетесь с миром проблем, когда многие люди попытаются использовать это, и у вас не хватит доступных экземпляров приложения rails для обработки любых новых соединений.

Одним из способов сделать это легко может быть использование сообщения Ajax для запуска создания документа, перетащите его в Задержка задания , а затем выполните 10-секундную периодическую проверку через ajax, информируя ожидающего пользователя о заданиях статус. Как только delayed_job завершит обработку вашей задачи в фоновом режиме и обновит что-либо в базе данных, чтобы указать, что она завершена, вы можете перенаправить пользователя через ajax во вновь созданный документ.

1 голос
/ 16 апреля 2009

Я не уверен на 100%, но, вероятно, ваш Apache превысил время ожидания запроса к приложению Rails Не могли бы вы попытаться установить директиву Apache's Timeout выше? Что-то вроде:

Timeout 120
...