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

对于存储在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 ... 

从Rails 5开始,将其放入初始化程序中:

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

我不确定其他版本。

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

我不确定Rails::Rack::Static是否在Rails中的任何地方使用。 Rails使用ActionDispatch::Static ,它不会从Rails::Rack::Static或类似的东西inheritance。 但它确实使用了Rack几个东西,包括Rack::Mime ,它(我认为?)与Mime完全分开, Mime在Rails的其他地方使用。

ActionDispatch::Static源代码: https : //github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/static.rb

好问题。 我建议深入研究Rails :: Rack :: Static,这些是现在公共场所提供的文件。

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

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

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