Capistrano和XSendFile配置

时间:2015-03-04 16:26:41

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

我正在尝试使用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

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

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

我尝试使用Capistrano & X-Sendfilemod_xsendfile with symbolic links中描述的ln -nFs解决方案,但都没有效果。

1 个答案:

答案 0 :(得分:0)

我终于成功了。有关XSendFile存在问题的人的一些提示

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