Я пытаюсь настроить рабочий сервер Rails с Apache 2.2, Passenger 4.0.59 и XSendFile 0.12. Приложение развернуто через Capistrano.
Развернутое приложение создает (возможно, большой) PDF-файл в #{Rails.root}/tmp
и обслуживает этот файл, используя send_file
.
Проблема в том, что Capistrano использует символические ссылки для указания на текущую развернутую версию приложения. XSendFile, с другой стороны, разыменовывает символические ссылки и отказывается обслуживать файл, если его реальное местоположение находится вне корня документа, даже если это разрешено XSendFilePath
. В журнале error.log Apache указано:
(20023)The given path was above the root path: xsendfile: unable to find file: /resolved/path/to/file.pdf
Все работает хорошо, когда я устанавливаю PassengerAppRoot
и XSendFilePath
на реальное местоположение текущей версии приложения без символических ссылок на пути. Но это нормально до следующего развертывания, которое требует перенастройки apache. Не очень полезно.
Как мне настроить параметры развертывания Capistrano и XSendFile, чтобы они работали вместе?
Я попробовал решения с ln -nFs
, описанные в Capistrano & X-Sendfile и в mod_xsendfile с символическими ссылками, но ни один из них не работает.