Capistrano 和 XSendFile 配置
Capistrano and XSendFile configuration
我正在尝试使用 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 and in mod_xsendfile with symbolic links 中描述的 ln -nFs
的解决方案,但 none 有效。
我终于成功了。给 XSendFile
遇到问题的人的一些提示
- 我将
XSendFilePath
设置为用户的 $HOME
,$HOME
的路径上没有符号链接,因此可以正常工作。从功能和安全的角度来看,我可以接受这一点,但这显然是一种解决方法。
- 请注意
XSendFilePath
对包含多个斜杠的路径敏感 /like//this
。我正在使用 apache 宏,同时从几个宏参数中连接 XSendFilePath
参数时,我放置了一些过时的斜杠。这导致 XSendFile 拒绝发送文件。
祝你好运!
我正在尝试使用 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 and in mod_xsendfile with symbolic links 中描述的 ln -nFs
的解决方案,但 none 有效。
我终于成功了。给 XSendFile
遇到问题的人的一些提示- 我将
XSendFilePath
设置为用户的$HOME
,$HOME
的路径上没有符号链接,因此可以正常工作。从功能和安全的角度来看,我可以接受这一点,但这显然是一种解决方法。 - 请注意
XSendFilePath
对包含多个斜杠的路径敏感/like//this
。我正在使用 apache 宏,同时从几个宏参数中连接XSendFilePath
参数时,我放置了一些过时的斜杠。这导致 XSendFile 拒绝发送文件。
祝你好运!