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