【问题标题】:Capistrano and XSendFile configurationCapistrano 和 XSendFile 配置
【发布时间】: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

当我将PassengerAppRootXSendFilePath 设置为当前版本应用程序的实际位置时,一切正常,路径上没有符号链接。但是直到下一次部署都可以,这需要重新配置apache。不是很有用。

我应该如何配置 Capistrano 部署和 XSendFile 参数以使其协同工作?

我尝试了ln -nFsCapistrano & X-Sendfilemod_xsendfile with symbolic links 中描述的解决方案,但没有一个有效。

【问题讨论】:

    标签: ruby-on-rails apache capistrano passenger x-sendfile


    【解决方案1】:

    我终于成功了。给遇到 XSendFile 问题的人的一些提示

    1. 我将XSendFilePath 设置为用户的$HOME$HOME 的路径上没有符号链接,所以它可以工作。从功能和安全的角度来看,我可以接受这一点,但这显然是一种解决方法。
    2. 注意XSendFilePath 对包含多个斜杠/like//this 的路径很敏感。我正在使用 apache 宏,在从几个宏参数中连接XSendFilePath 参数时,我放了一些过时的斜杠。这导致 XSendFile 拒绝发送文件。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多