PDF и Ruby on Rails - PullRequest
       1

PDF и Ruby on Rails

1 голос
/ 03 февраля 2012

Какие проблемы могут возникнуть, когда пользователь нажимает действие get_pdf? Если есть проблемы, как это можно решить?

class PdfController < ApplicationController
  def get_pdf
    send_data Pdf.create(params[:contents])
  end
end

class Pdf
  def self.create(contents)
    make_pdf(contents) # takes 30 seconds to run
  end
end

1 Ответ

2 голосов
/ 03 февраля 2012

Основная проблема заключается в том, что обычно у вас будет ограниченное количество процессов Rails на вашем сервере, и каждый раз, когда пользователь делает запрос, он занимает весь процесс Rails на время запроса.

Давайтескажем, у вас есть 8 процессов рельсов.Если восемь пользователей запрашивают PDF-файл одновременно, все процессы будут заняты в течение 30 секунд, и никто не сможет использовать ваш сайт в течение 30 секунд.

Если вы посмотрите на него немного глубже, выобнаружим, что на самом деле время простоя будет немного больше 30 секунд, потому что Rails должен тратить время на отправку файла пользователю, а у пользователя может быть медленное интернет-соединение.Возможно, вам удастся обойти это, если вы включите правильный тип буферизации на своем веб-сервере или используете что-то вроде X-Accel-Redirect nginx .

Другая проблема заключается в том, что любой веб-сервервы можете отказаться от запроса после того, как он решит, что Rails слишком долго ждал.Вероятно, через 30 секунд он не сдастся, но, возможно, вам следует проверить конфигурацию вашего веб-сервера, просто чтобы быть уверенным.

Вы также должны быть уверены, что предоставили правильные заголовки HTTP, чтобы сообщить браузеру, какого родафайл это.Я думаю Content-Type это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...