gpt4 book ai didi

ruby-on-rails - Capistrano 和 X-Sendfile

转载 作者:行者123 更新时间:2023-12-04 07:29:39 25 4
gpt4 key购买 nike

我正在尝试使 X-Sendfile 工作以使用 capistrano 为我的繁重附件提供服务。我发现 X-Sendfile 不适用于符号链接(symbolic link)。我怎么能处理 Capistrano 符号链接(symbolic link)的文件夹中的文件呢?

我的网络服务器是 apache2 + 乘客

在我的 production.rb 中:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

在我的 Controller Action 中:
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

我的文件系统结构(其中“->”代表“符号链接(symbolic link)”,缩进表示子文件夹):
/var/www/myproject
releases/
....
current/ -> /var/www/myproject/releases/xxxxxxxxxxxx
app/
public/
private/
videos/ -> /home/ftp_user/videos

我的 Apache 配置
XSendFile 开启
XSendFilePath/#也试过/home/ftp_user/videos

我的应用程序能够提供小文件,但对于大文件,它会给出 NoMemoryError(无法分配内存)

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

这是我要提供的文件的响应 header
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 问题,或者我正在尝试为符号链接(symbolic link)问题做一些不可能的事情

编辑:
在接受的建议答案之后, “神奇地”开始工作了!

我以这种方式创建了一个 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 以正确的方式提供文件(也是非常重的文件)。

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

最佳答案

也许我找到了解决方案。你是如何制作符号链接(symbolic link)的?

也许你做了ln -s ,而且还不够

Here他们建议使用 ln -nFs ,所以他认为这是您要链接的目录

关于ruby-on-rails - Capistrano 和 X-Sendfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22115011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com