2010-04-15 4 views
4

Pour les ressources stockées dans le dossier public d'une application ruby-on-rails, il est possible de modifier le type de contenu lors de l'exécution de 'script/server' ? Par exemple, j'essaie de créer une application HTML5 prenant en charge le mode hors connexion et d'avoir un 'offline.manifest'. Quand je lance:Dossier personnalisé de type de contenu dans le dossier public de Rails

curl -I localhost:3000/offline.mainfest 

Les informations d'en-tête suivant est retourné:

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

Cependant, les spécifications HTML5 exigent:

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

Répondre

1

Au Rails 5, mettre cela dans un initialiseur fonctionne:

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

Je ne suis pas sûr autres versions.

n.b. qu'il pas travailler pour faire Mime::Type.register "text/cache-manifest", :manifest - ce n'est que pour les contrôleurs de rails.

Je ne suis pas sûr si Rails::Rack::Static est utilisé n'importe où dans Rails. Rails utilise ActionDispatch::Static, qui n'hérite pas de Rails::Rack::Static ou quelque chose comme ça. Mais il utilise plusieurs choses de Rack, y compris Rack::Mime, qui est (je pense?) Complètement séparé de Mime qui est utilisé ailleurs dans Rails.

source pour ActionDispatch::Static: https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/static.rb

3

Bonne question. Je suggère de creuser dans Rails :: Rack :: Static qui est ce qui sert les fichiers hors du public ces jours-ci.

Vous pouvez également écrire une action de contrôleur pour servir uniquement ce type de fichier. Servez à l'aide send_file et passer le type explicitement par exemple:

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

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

+0

Merci. J'ai essayé d'utiliser le Rails :: Rack :: Static mais j'ai fini par utiliser la deuxième option. –

Questions connexes