Capistrano 和 XSendFile 配置

2024-05-15

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

当我设置时一切正常PassengerAppRoot and XSendFilePath到当前版本应用程序的真实位置,路径上没有符号链接。但直到下一次部署之前都可以,这需要重新配置 apache。不太有用。

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

我尝试了解决方案ln -nFs描述于Capistrano 和 X-Sendfile https://stackoverflow.com/questions/22115011/capistrano-x-sendfile and in 带有符号链接的 mod_xsendfile https://stackoverflow.com/questions/5573853/mod-xsendfile-with-symbolic-links但没有一个有效。


我终于成功了。给那些在使用 XSendFile 时遇到问题的人的一些提示

  1. I set XSendFilePath到用户的$HOME,路径上没有符号链接$HOME,所以它有效。从功能和安全的角度来看,我可以接受这一点,但这显然是一种解决方法。
  2. 意识到XSendFilePath对包含多个斜杠的路径敏感/like//this。我正在使用 apache 宏,同时连接XSendFilePath参数中的几个宏参数我放了一些过时的斜杠。这导致 XSendFile 拒绝发送文件。

祝你好运!

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

Capistrano 和 XSendFile 配置 的相关文章

  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • .htaccess 在本地主机上给出 500 错误

    我是 MVC 框架的初学者 我正在尝试根据教程创建一个自己的 他们提供的 htaccess 文件包含 RewriteEngine On RewriteCond REQUEST FILENAME d RewriteCond REQUEST F
  • 在自定义条件下清理 SQL

    我需要创建一个简单的搜索 但我无法使用 Sphinx 这是我写的 keywords input split s queries keywords each do keyword queries lt lt sanitize sql for
  • 强制 mod_rewrite 的 RewriteRule 替换的 URL 路径

    使用 mod rewrite 执行重写时RewriteRule 根据替换的根目录是否存在于文件系统上 评估替换并猜测它是 URL 还是文件系统路径 这是相关部分文档 https httpd apache org docs 2 4 mod m
  • Apache 配置:正则表达式禁止访问以点开头的文件/目录

    我想禁用对其名称以点开头的任何文件或目录的访问 我想出了以下方法 但只有当它们直接位于文档根目录中时 它才会禁用对以 DOT 开头的文件 目录的访问
  • 为什么这个 FilesMatch 匹配不正确?

    我们一直在尝试将服务器配置为不缓存 htm 文件 因为它会导致我们的分析包出现一些问题 并且如果访问者点击浏览器中的后退按钮 则无法正确显示页面 我们尝试通过添加以下内容来解决这个问题
  • 将局部变量传递给视图加载后渲染的局部变量

    Update 我刚刚发现另一个线程解释了为什么我遇到这个问题 将本地 Rails 变量传递给 JavaScript 到部分 https stackoverflow com questions 12342058 pass local rail
  • 在所有延迟的作业之前挂钩

    是否可以在所有delayed job任务之前运行一个方法 基本上 我们试图确保每台运行delayed job的服务器都有我们代码的最新实例 因此我们希望运行一个方法来在每个作业运行之前检查这一点 我们已经有了 check 方法并在其他地方使
  • Apache Web 服务器:AH00125:请求超出了 FallbackResource 的 10 个子请求的限制

    当我在 apache 2 4 Web 服务器配置中使用 FallbackResource 时 它显示错误 AH00125 请求超出了 10 个子请求嵌套级别的限制 请帮助解决这个问题 是指定url http localhost bv hos
  • .htaccess - 将多个子目录重写到根目录

    我正在尝试将多个子目录重写到根目录 我遇到的情况是我有一个名为blog 其中将包含主站点文件夹和另一个名为的子目录项目 包含我想从根目录访问的其他文件夹 www blog work contact projects projectA pro
  • htaccess 将所有子域重定向到同一目录

    我希望能够将所有子域重定向到一个文件夹 RewriteCond HTTP HOST example com RewriteRule http example com subdomains 1 L P 例如 如果某些访问sub1 exampl
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • 使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

    我已经想通的事情 我正在学习如何在 Rails 中创建多租户应用程序 该应用程序根据用于查看应用程序的域或子域来提供来自不同模式的数据 我已经回答了一些问题 如何让 subdomain fu 也能与域一起使用 这是有人问了同样的问题 htt
  • Heroku 码头部署

    我正在关注这篇文章https devcenter heroku com articles container registry and runtime https devcenter heroku com articles containe
  • Spring MVC http 500错误apache

    上面是我的程序的目录层次结构 我是 Spring 新手 正在学习 MVC 概念 我编写了一个程序 它将输入 名称 输入文本框并打印 Hello name 以下是我的目录结构和我创建的各种文件 web xml
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 如何访问“可以?”细胞内的方法?

    我在用着cancan and cells我的 ruby on rails 项目中的 gems 如何访问can 细胞内的方法 Thanks 我必须这样做 尝试 class MyCell lt Cell Rails include CanCan
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 限制 has_many 关联中的对象数量

    我有一个相册 里面有很多照片 counter cache 设置会更新相册表中的 photos count 列 如何限制相册的照片数量 就我而言 使用就足够了validates length of class Album has many p
  • 如何在控制器中获取f.submit的名称参数?

    我创建了 form html erb 其中的编码如下 是的 我确实有两个相同表单的提交 并且它们都有 更新 和 销毁 等名称 当用户按下销毁按钮时 books controller 中的更新操作将被调用 并判断是 更新 还是 销

随机推荐