我正在尝试使用 Apache 2.2、Passenger 4.0.59 和 XSendFile 0.12 配置 Rails 生产服务器。应用程序通过 Capistrano 部署。
部署的应用程序生成(可能很大)PDF#{Rails.root}/tmp
并使用send_file
.
问题是 Capistrano 使用符号链接指向当前部署的应用程序版本。另一方面,如果文件的实际位置在文档根目录之外,则 XSendFile 会取消引用符号链接并拒绝提供文件,即使XSendFilePath
. Apache 的 error.log 状态:
(20023)The given path was above the root path: xsendfile: unable to find file: /resolved/path/to/file.pdf
PassengerAppRoot
当我设置到XSendFilePath
当前版本的应用程序的实际位置时,一切正常,路径上没有符号链接。但是直到下一次部署都可以,这需要重新配置apache。不是很有用。
我应该如何配置 Capistrano 部署和 XSendFile 参数以使其协同工作?
我尝试了Capistrano & X-Sendfile和mod_xsendfileln -nFs
中描述的解决方案,但没有一个有效。