Configuração Capistrano e XSendFile
Estou tentando configurar o servidor de produção Rails com Apache 2.2, Passenger 4.0.59 e XSendFile 0.12. O aplicativo é implantado via Capistrano.
O aplicativo implantado produz PDF (talvez grande) para#{Rails.root}/tmp
e serve esse arquivo usandosend_file
.
O problema é que o Capistrano usa links simbólicos para apontar para a versão do aplicativo atualmente implantada. O XSendFile, por outro lado, desreferencia links simbólicos e se recusa a servir um arquivo se seu local real estiver fora da raiz do documento, mesmo que seja permitido porXSendFilePath
. O error.log do Apache declara:
(20023)The given path was above the root path: xsendfile: unable to find file: /resolved/path/to/file.pdf
Tudo funciona bem quando eu definirPassengerAppRoot
eXSendFilePath
para o local real da versão atual do aplicativo, sem links simbólicos no caminho. Mas tudo bem até a próxima implantação, o que requer reconfiguração do apache. Não é muito útil.
Como devo configurar os parâmetros de implantação e XSendFile do Capistrano para que funcionem juntos?
Eu tentei soluções comln -nFs
descrito emCapistrano e X-Sendfile e emmod_xsendfile com links simbólicos mas nenhum funciona.