Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 卡皮斯特拉诺;X-Sendfile_Ruby On Rails_Apache_Ruby On Rails 4_Video Streaming_X Sendfile - Fatal编程技术网

Ruby on rails 卡皮斯特拉诺;X-Sendfile

Ruby on rails 卡皮斯特拉诺;X-Sendfile,ruby-on-rails,apache,ruby-on-rails-4,video-streaming,x-sendfile,Ruby On Rails,Apache,Ruby On Rails 4,Video Streaming,X Sendfile,我正试图让X-Sendfile为我的capistrano沉重的附件服务。我发现X-Sendfile不能使用符号链接。如何处理由Capistrano so符号链接的文件夹中的文件 我的web服务器是apache2+passenger 在my production.rb中: 在我的控制器操作中: 我的文件系统结构(其中“->”表示“符号链接”,缩进表示子文件夹): 我的apache配置 上的XSendFile XSendFilePath/#也尝试了/home/ftp_用户/视频 我的应用程序能够处理

我正试图让X-Sendfile为我的capistrano沉重的附件服务。我发现X-Sendfile不能使用符号链接。如何处理由Capistrano so符号链接的文件夹中的文件

我的web服务器是apache2+passenger

在my production.rb中:

在我的控制器操作中:

我的文件系统结构(其中“->”表示“符号链接”,缩进表示子文件夹):

我的apache配置 上的XSendFile XSendFilePath/#也尝试了/home/ftp_用户/视频

我的应用程序能够处理小文件,但对于大文件,它会产生一个异常错误(无法分配内存)

我认为它没有使用x-sendfile,因为如果我不使用它,行为是相同的

以下是我试图提供的文件的响应头

Accept-Ranges:bytes
Cache-Control:private
Connection:Keep-Alive
Content-Disposition:inline
Content-Range:bytes 0-1265/980720989
Content-Transfer-Encoding:binary
Content-Type:video/mp4
Date:Sat, 01 Mar 2014 13:24:19 GMT
ETag:"70b7da582d090774f6e42d4e44ae3ba5"
Keep-Alive:timeout=5, max=97
Server:Apache/2.4.6 (Ubuntu)
Status:200 OK
Transfer-Encoding:chunked
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Powered-By:Phusion Passenger 4.0.37
X-Request-Id:22ff0a30-c2fa-43fe-87c6-b9a5e7da12f2
X-Runtime:0.008150
X-UA-Compatible:chrome=1
X-XSS-Protection:1; mode=block
我真的不知道如何调试它,如果它是一个x-sendfile问题,或者如果我试图做一些不可能的事来解决符号链接问题

编辑: 按照已接受答案中的建议答案,它“神奇地”开始工作

我通过以下方式创建了capistrano任务:

 task :storage_links do
    on roles(:web), in: :sequence, wait: 2 do
      #creo i link simbolici alle risorse
      within "/var/www/my_application/current/private" do
        execute :ln, "-nFs", "/home/ftp_user/videos"
      end
    end
  end
我没有在完成更新后运行它,所以我在重启后手动运行它

我通过以下方式更正了我的apache配置:

XSendFilePath /var/www/my_application
(在我将x-sendfile指向ftp文件夹之前)

在我的响应标题中,现在X-Sendfile也没有出现,我得到了206部分内容,但一切似乎都正常,apache以正确的方式提供文件(也是非常重的文件)


我知道这可能是一个安全问题,但我会尝试将其指向我的应用程序的最后一个版本,因为将其指向当前符号链接不起作用

也许我找到了解决办法。您是如何制作符号链接的

也许你做了
ln-s
,但这还不够


他们建议使用
ln-nFs
,因此他认识到这是一个目录,您可以在其中链接到Rails、Passenger、Apache和X-Sendfile的版本。还有操作系统的类型和版本。我不得不使用一个定制的Apache服务器二进制文件,但从来没有让X-Sendfile工作过,这和你的问题一样(不是内存部分,因为它总是小文件),尽管我总是指责二进制文件。我在Ubuntu 13.10(64位)上使用Rails 4.0.0、Passenger 4.0.37、Apache 2.4.6。希望它能帮助你。哇,这是工作现在!!!我将编辑我的问题以解释我所做的更改!非常感谢你!你救了我一天!对我来说,这不会改变任何事情。debian 7上的Apache 2.2 xsendfile 0.12。除非我将
PassengerAppRoot
指向当前部署的应用程序版本的直接位置,并且路径上没有符号链接,否则XSendFile仍然无法工作。显然,这与卡皮斯特拉诺的观点不一致。有什么想法吗?我终于成功了。请看这里:
Accept-Ranges:bytes
Cache-Control:private
Connection:Keep-Alive
Content-Disposition:inline
Content-Range:bytes 0-1265/980720989
Content-Transfer-Encoding:binary
Content-Type:video/mp4
Date:Sat, 01 Mar 2014 13:24:19 GMT
ETag:"70b7da582d090774f6e42d4e44ae3ba5"
Keep-Alive:timeout=5, max=97
Server:Apache/2.4.6 (Ubuntu)
Status:200 OK
Transfer-Encoding:chunked
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Powered-By:Phusion Passenger 4.0.37
X-Request-Id:22ff0a30-c2fa-43fe-87c6-b9a5e7da12f2
X-Runtime:0.008150
X-UA-Compatible:chrome=1
X-XSS-Protection:1; mode=block
 task :storage_links do
    on roles(:web), in: :sequence, wait: 2 do
      #creo i link simbolici alle risorse
      within "/var/www/my_application/current/private" do
        execute :ln, "-nFs", "/home/ftp_user/videos"
      end
    end
  end
XSendFilePath /var/www/my_application