无法通过 Heroku 上的 Rails 公共文件夹访问某些文件类型

McF*_*den 5 ruby-on-rails heroku ruby-on-rails-4

我们在 Heroku 上托管了一个 Rails 应用程序,并且在从公共文件夹中提供一些静态资产时遇到了一些麻烦。(我知道,这是不推荐的。我们实际上使用 CloudFront 和我们的主应用程序的自定义来源,因此我们仍然可以获得 CDN 的好处。但这与这个问题无关。)

一些资产表现良好,完全符合预期。例如:/404.html/favicon.png

其他人返回 HTTP 406 错误: /video-js/swf/video-js-4.1.0.swf

导轨 4.1.1

红宝石 2.1.2

rails_12factor宝石是否存在。

production.rb 文件集 config.serve_static_assets = true

该文件肯定存在.. 在 Heroku 上使用控制台:

File.size("/app/public/video-js/swf/video-js-4.1.0.swf") => 14059

但是当我尝试访问该文件时,我收到了HTTP 406 Not Acceptable响应

curl -I http://my-rails-application.com/video-js/swf/video-js-4.1.0.swf

返回:

HTTP/1.1 406 Not Acceptable Content-length: 0 Content-Type: text/html; charset=utf-8 Date: Wed, 04 Jun 2014 02:25:37 GMT Status: 406 Not Acceptable X-Request-Id: d184b097-7326-49cb-ad05-539459f7df08 X-Runtime: 0.532988 Connection: keep-alive

我尝试为 swf 文件 ( Mime::Type.register "application/x-shockwave-flash", :swf)添加 Mime 类型,现在我得到了 404 而不是 406,但这仍然不是很有用。

回顾一下,html、png、jpg、ico 和 txt 文件都可以完美地提供。swf、ttf、woff 和其他一些文件没有从公共文件夹中提供。

什么可能导致公用文件夹中的某些文件类型正常工作,而其他文件类型无法正常工作?