Capistrano 和 X-Sendfile

2023-12-04

我正在尝试让 X-Sendfile 使用 capistrano 来处理我的繁重附件。我发现 X-Sendfile 不适用于符号链接。我如何处理 Capistrano 符号链接的文件夹内的文件?

我的网络服务器是apache2+passenger

in my 生产.rb:

config.action_dispatch.x_sendfile_header = "X-Sendfile"

in my 控制器动作:

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

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

/var/www/myproject
  releases/
  ....
  current/ -> /var/www/myproject/releases/xxxxxxxxxxxx
    app/
    public/
    private/
      videos/ -> /home/ftp_user/videos

my 阿帕奇配置X 发送文件 XSendFilePath / #也尝试过/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 问题或者如果我试图对符号链接问题做一些不可能的事情

EDIT:按照已接受答案中的建议答案,“神奇地”开始工作了!

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

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


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

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

Here他们建议使用ln -nFs,所以他认识到这是您正在链接的目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Capistrano 和 X-Sendfile 的相关文章

随机推荐

  • 使用 Apps 脚本在 Gmail 中嵌入 Google 表单

    我正在尝试使用 Apps 脚本在电子邮件中嵌入预填写的表单 这些电子邮件只会发送给 Gmail 用户 我想要的功能与手动通过电子邮件发送表单时按 在电子邮件中包含表单 选项相同 我已经成功创建了prefilledUrl并使用UrlFetch
  • 将字符串格式转换为日期时间(mm/dd/yyyy)

    我必须将 mm dd yyyy 格式的字符串转换为日期时间变量 但它应保留 mm dd yyyy 格式 string strDate DateTime Now ToString MM dd yyyy 请帮忙 您正在寻找DateTime Pa
  • 递归clearInterval不起作用

    我在 javaScript 中有以下函数 当我检测到需要重新加载样式表时调用此函数 例如 用户语言发生变化 因此文本将不再适合按钮 问题是 它卡在了 setInterval 部分 无限地循环进入其中 我可以在 chrome 调试器中看到它确
  • 如何将镜头效果应用到我的 UIImage 上?

    我如何将镜头效果应用到我的 UIImage 上 如下所示http processing org learning topics lens html 您可以使用Cocos2D框架来做到这一点 如果您选择使用它 可以通过以下方法轻松应用镜头效果
  • to_sql 不适用于 update_attributes 或 .save

    我正在寻找一种方法来存储在更新或创建操作中生成的 sql 字符串 我尝试过附加 to sql到最后update attributes但它返回一个TrueClass错误 或类似的东西 我有什么遗漏的吗 简而言之 您需要重写 ActiveRec
  • 在 SwiftUI 中处理派生状态

    假设我正在创建一个 日期编辑器 视图 目标是 采用默认的种子日期 它允许用户更改输入 如果用户随后选择 他们可以按 保存 在这种情况下 视图的所有者可以决定对数据执行某些操作 这是实现它的一种方法 struct AlarmEditor Vi
  • SQL 中的查询设计实践

    我正在 MS Access 2007 中构建数据库查询 我想知道我当前的设计实践是否达到标准 基本上 数据库在我来之前就已经配置好了 但我被赋予了构建有效查询来提取数据的责任 我当前的查询小而简单 每个查询一次完成 2 3 个任务 有时仅
  • Google OAuth2 - isAccessTokenExpired() 始终为 true

    我在应用程序中使用 OAuth 并且希望在访问令牌过期时注销用户 但是当我检查令牌过期时 client gt isAccessTokenExpired 它总是返回 1 if isset GET logout unset SESSION to
  • 是否可以导出 Google Apps 脚本执行记录

    我编写了一个 Web 应用程序脚本 该脚本被部署为在用户访问 Web 应用程序的上下文中运行 是否可以以编程方式导出 Web Apps 脚本执行脚本 不直接 您不会获得完整的堆栈跟踪 但您可以仔细记录您想要通知的所有内容 在脚本的末尾 您可
  • Excel VBA 将关闭的工作簿作为值复制并粘贴到活动工作簿,Mac OS X

    我知道这是一种常见的查询类型 但在主动搜索后 我尚未找到针对我的特定实例的答案 我也是一个VBA新用户 所以请耐心等待 我想要将包含实时公式 范围 A1 HW6000 的整个数据表 HISTORY XLSM 中的 AllDATA 选项卡 从
  • 如何使用 Watir 访问 Shadow DOM 并与之交互?

    我需要访问此页面 chrome downloads 并检查文件是否已下载 但它是 Shadow DOM 我发现这篇文章如何使用 Selenium Webdriver 访问 DOM 元素 http jeremysklarsky github
  • HTML - 如何制作“阅读更多”按钮

    在我的网站上 我有我的博客 我希望每张卡片都有一个 阅读更多 按钮 我特别希望它只显示x折叠时显示单词 非字符 然后展开时显示整个文本 我不想有一个按钮可以转到另一个具有完整内容的页面 因为我正在使用自己构建的 CMS 它会自动从表单添加帖
  • 将鼠标悬停在 Raphaeljs 中的一组元素上

    我有一个只包含一个矩形的集合 var hoverTrigger this paper set var outline this paper rect outline attr hoverTrigger push outline this s
  • Blazor InputSelect 中显示第一个选项,但值为 null

    我在 Razor 组件中遇到了 InputSelect 元素的奇怪行为 在我的输入表单上 我有几个与模型 合作伙伴 绑定的字段 我以下拉选择的形式放置了其中一些字段 因为绑定字段的 PartnerCategory 值是 id 整数 所以我从
  • SSRS 导出到 Excel 隐藏/取消隐藏问题

    我有一份 SSRS 2008 报告 其中我必须隐藏一些列并导出到 Excel 导出到 Excel 后 要求规定这些列应该在 Excel 中取消隐藏 请建议一种方法来做到这一点 因为我听说这根本不可能 提前致谢 这是可以做到的 但我相信只有部
  • 使用 jQuery 在切换开关上旋转图像

    有问题的网站 http mtthwbsh com 我正在尝试创建一个可折叠的导航 在切换时 箭头指向上方 隐藏时指向下方 我一直在阅读有关使用 jQuery 旋转图像的内容 并发现这是我最好的资源 使用 jQuery 旋转图像 OnClic
  • 从Power BI导出百万行表克服了15万行的限制

    有没有办法克服 Power BI 导出 150k 行的最大限制 限制文档 https learn microsoft com en us power bi visuals power bi visualization export data
  • 使用 iOS NumberFormatter 将小数格式化为分数表示

    在 iOS 中 如何使用 NumberFormatter 将数字的小数部分格式化为其小数表示形式 例如我想格式化数字2 375 as 2 3 8 可以用 NumberFormatter 来完成吗 不 您需要实现您自己的 Rational F
  • 什么表明 Office Open XML 单元格包含日期/时间值?

    我正在使用以下命令读取 xlsx 文件Office 开放 XML SDK并且对读取日期 时间值感到困惑 我的一个电子表格有此标记 由 Excel 2010 生成
  • Capistrano 和 X-Sendfile

    我正在尝试让 X Sendfile 使用 capistrano 来处理我的繁重附件 我发现 X Sendfile 不适用于符号链接 我如何处理 Capistrano 符号链接的文件夹内的文件 我的网络服务器是apache2 passenge