我正在尝试使用X-Sendfile工作来为capistrano提供重型附件.我发现X-Sendfile不能使用符号链接.我怎么能处理Capistrano符号链接的文件夹中的文件呢?
我的网络服务器是apache2乘客
在我的production.rb中:
config.action_dispatch.x_sendfile_header = "X-Sendfile"
在我的控制器动作中:
filename = File.join([Rails.root,"private/videos",@lesson.link_video1 + ".mp4"]) response.headers["X-Sendfile"]= filename send_file filename,:disposition => :inline,:stream => true,:x_sendfile => true render nothing: true
我的文件系统结构(其中“ – >”代表“symlink”,缩进意味着子文件夹):
/var/www/myproject releases/ .... current/ -> /var/www/myproject/releases/xxxxxxxxxxxx app/ public/ private/ videos/ -> /home/ftp_user/videos
我的apache配置
XSendFile上
XSendFilePath / #also试过/ home / ftp_user / videos
我的应用程序能够提供小文件,但是对于大文件,它会产生NoMemoryError(无法分配内存)
我认为它不使用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
我没有设法在finalize_update之后运行它,所以我在重启后手动运行它.
我用这种方式纠正了我的apache配置:
XSendFilePath /var/www/my_application
(在我将x-sendfile指向ftp文件夹之前)
在我的响应标题中,现在X-Sendfile也没有出现,我得到了206 – 部分内容,但一切似乎都有效,而apache正在以正确的方式提供文件(也是非常繁重的文件).
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。