Capistrano und XSendFile Konfiguration

Ich versuche, den Rails-Produktionsserver mit Apache 2.2, Passenger 4.0.59 und XSendFile 0.12 zu konfigurieren. Die Anwendung wird über Capistrano bereitgestellt.

Deployed-Anwendung erstellt (möglicherweise große) PDF-Dateien an#{Rails.root}/tmp und dient diese Datei mitsend_file.

Das Problem ist, dass Capistrano Symlinks verwendet, um auf die aktuell bereitgestellte Version der Anwendung zu verweisen. XSendFile hingegen dereferenziert Symlinks und weigert sich, eine Datei bereitzustellen, wenn sich ihr tatsächlicher Speicherort außerhalb des Dokumentstamms befindet, auch wenn dies durch @ zulässig isXSendFilePath. Das error.log von Apache lautet:

(20023)The given path was above the root path: xsendfile: unable to find file: /resolved/path/to/file.pdf

Alles funktioniert gut, wenn ichPassengerAppRoot undXSendFilePath zum tatsächlichen Speicherort der aktuellen Anwendungsversion, ohne Symlinks auf dem Pfad. Bis zur nächsten Bereitstellung, die eine Apache-Neukonfiguration erfordert, ist dies jedoch in Ordnung. Nicht sehr nützlich.

Wie muss ich die Capistrano-Bereitstellungs- und XSendFile-Parameter konfigurieren, damit sie zusammenarbeiten?

Ich habe versucht Lösungen mitln -nFs beschrieben inCapistrano & X-Sendfile und inmod_xsendfile mit symbolischen Links aber keiner funktioniert.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage