【发布时间】:2015-05-05 17:56:58
【问题描述】:
我正在尝试使用 Apache 2.2、Passenger 4.0.59 和 XSendFile 0.12 配置 Rails 生产服务器。应用通过 Capistrano 部署。
已部署的应用程序生成(可能很大)PDF 到 #{Rails.root}/tmp 并使用 send_file 提供此文件。
问题在于 Capistrano 使用符号链接指向当前部署的应用程序版本。另一方面,如果文件的实际位置在文档根目录之外,即使XSendFilePath 允许,XSendFile 也会取消引用符号链接并拒绝提供文件。 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 参数以使其协同工作?
我尝试了ln -nFs 和Capistrano & X-Sendfile 和mod_xsendfile with symbolic links 中描述的解决方案,但没有一个有效。
【问题讨论】:
标签: ruby-on-rails apache capistrano passenger x-sendfile