Почему мои процессы ruby ​​не завершаются на общем сервере FastCGI при использовании send_file?

После разработки замечательного приложения на моей локальной машине, без учета того, как оно будет работать на моем хосте, я столкнулся с ужасной проблемой. Я передаю файлы (.pdf &.zip) через рельсы send_file, чтобы я мог вести статистику. Единственная проблема состоит в том, что, когда два (или более) файла загружаются одновременно, должен запускаться новый процесс ruby ​​dispatch.fcgi для обработки каждого из них. Я понимаю, что этого можно избежать, используя mod_xsendfile, но, к сожалению, мой хост не поддерживает этот мод apache. Так вот странная часть. Эти процессы создаются, как и ожидалось, но по какой-то причине они никогда не завершаются. В качестве теста я скачал около 10 файлов одновременно с пары разных компьютеров. Было создано около 10 процессов, но ни один из них не завершился. Даже через несколько минут после их вызова и даже после того, как загрузки были долгое время завершены.

Почему они не выходят? Что я могу сделать, чтобы избежать этой проблемы, кроме как переключиться на реальный хост, который обеспечивает поддержку mod_xsendfile?

1 ответ

Решение

Если вам не нужен контроль доступа к файлам, которые вы предлагаете, вы всегда можете попробовать разместить файлы где-нибудь в / public или в другом URL-адресе за пределами приложения rails.

Когда пользователь переходит к загрузке файла, он может перевести его к действию контроллера, которое обновляет статистику загрузки, а затем перенаправляет браузер пользователя на путь, где файл фактически хранится, с помощью тега meta refresh или небольшого количества javascript. Таким образом, apache будет обрабатывать передачу файлов без рельсов... по сути, что будет делать xsendfile.

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

Другие вопросы по тегам