2010-04-15 78 views
4

對於存儲在ruby-on-rails應用程序的'public'文件夾中的資產,可以在運行'script/server'時更改'Content-Type' ?例如,我試圖創建一個支持離線模式的HTML5應用程序,並且有一個'offline.manifest'。當我運行:返回Rails'public'文件夾中文件的自定義內容類型

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 
... 

回答

1

鐵軌5,把這個在初始化工作:

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

我不知道其他版本。

n.b.它會不是工作要做Mime::Type.register "text/cache-manifest", :manifest - 這是唯一的軌道控制器。

我不確定在Rails中的任何地方是否使用Rails::Rack::Static。 Rails使用ActionDispatch::Static,它不會從Rails::Rack::Static或類似的東西繼承。但它確實使用了Rack中的幾個東西,包括Rack::Mime,這是(我認爲?)完全獨立於Mime,它在Rails的其他地方使用。

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

3

好問題。我建議挖掘Rails :: Rack :: Static,這些服務是近期公開的文件。

另外,你也可以寫一個controller-action來爲這個文件類型服務。 爲他們服務了使用由send_file並明確傳遞的類型如:

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

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

+0

謝謝。我嘗試使用Rails :: Rack :: Static,但最終使用第二個選項。 – 2010-04-15 18:50:28

相關問題