Rails'public'文件夹中的文件自定义内容类型

时间:2010-04-15 15:41:26

标签: ruby-on-rails

对于存储在ruby-on-rails应用程序的'public'文件夹中的资产,是否可以在运行'script / server'时更改'Content-Type'?例如,我正在尝试创建支持离线模式的HTML5应用程序,并且具有“offline.manifest”。我跑的时候:

curl -I localhost:3000/offline.mainfest

返回以下标题信息:

HTTP/1.1 200 OK
...
Content-Type: text/plain
...

但是,HTML5规范要求:

HTTP/1.1 200 OK
...
Content-Type: text/cache-manifest
...

2 个答案:

答案 0 :(得分:3)

好问题。我建议深入研究Rails :: Rack :: Static这些日子以外的公共文件。

或者,您可以编写一个控制器操作来仅提供此文件类型。 使用send_file为它们提供服务并明确传递类型,例如:

send_file params[:filename], :type => 'text/cache-manifest'

http://apidock.com/rails/ActionController/Streaming/send_file

答案 1 :(得分:2)

从Rails 5开始,将它放在初始化程序中就可以了:

Rack::Mime::MIME_TYPES[".manifest"]="text/cache-manifest"

我不确定其他版本。

n.b。它将 工作Mime::Type.register "text/cache-manifest", :manifest - 这仅适用于rails控制器。

我不确定在Rails中的任何地方是否使用Rails::Rack::Static。 Rails使用ActionDispatch::Static,它不会从Rails::Rack::Static或类似的东西继承。但它确实使用了Rack中的一些内容,包括Rack::Mime,它(我认为?)完全独立于Rails中其他地方使用的Mime

来源ActionDispatch::Statichttps://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/static.rb