Одна из обязанностей моего приложения на Rails - создавать и обслуживать подписанные xmls. Любой подписанный xml, после его создания, никогда не изменяется. Поэтому я храню каждый xml в папке public
и перенаправляю клиента соответствующим образом, чтобы избежать ненужной обработки с контроллера.
Теперь я хочу новую функцию: каждый xml связан с датой, и я хотел бы реализовать возможность обслуживать сжатый файл, содержащий каждый xml, дата которого лежит в периоде, указанном клиентом. Тем не менее, период не может быть ограничен менее чем одним месяцем, чтобы эта функция была полезной, и это означает, что некоторые обслуживаемые zip-файлы будут иметь размер до 50 млн.
Мое приложение развернуто как Пассажирский модуль Apache. Таким образом, совершенно недопустимо обслуживать файл с send_data
, поскольку клиенту придется ждать, пока будет создан весь сжатый файл, прежде чем начнется фактическая загрузка. Хотя у меня есть идея о том, как реализовать эту функцию в Rails, чтобы сжатый файл создавался при обслуживании , я чувствую, что у моего сервера не хватит ресурсов, когда некоторые длинные процессы Ruby / Passenger будут выделены для обслуживания больших ZIP-файлы.
Я читал о лучшем решении для обслуживания статических файлов через Apache, но не динамических.
Итак, каково решение проблемы? Мне нужно что-то вроде собственного обработчика Apache? Как мне сообщить Apache из моего приложения, как обрабатывать запрос, сжимать файлы и передавать результат одновременно?