代码之家  ›  专栏  ›  技术社区  ›  Kevin Sylvestre

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

  •  5
  • Kevin Sylvestre  · 技术社区  · 15 年前

    对于存储在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 回复  |  直到 8 年前
        1
  •  2
  •   John Bachir    8 年前

    从Rails 5开始,将其放入初始化器中可以:

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

    我不确定其他版本。

    注意,它会 要做的工作 Mime::Type.register "text/cache-manifest", :manifest –这只适用于Rails控制器。

    我不确定 Rails::Rack::Static 在铁轨上的任何地方使用。钢轨使用 ActionDispatch::Static ,它不是继承自 轨道::机架::静态 或者类似的事情。但它确实使用了 Rack 包括 Rack::Mime ,那是(我想?)完全独立于 Mime 在铁轨的其他地方使用。

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

        2
  •  3
  •   Taryn East    15 年前

    好问题。我建议深入研究一下rails::rack::static,这就是现在公开的文件。

    或者,您可以编写一个控制器操作来服务于此文件类型。 使用send_文件向他们提供服务,并显式传递类型,例如:

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

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