2010-02-15 20 views
36

Attualmente sto sviluppando un'applicazione basata su rack e desidero reindirizzare tutte le richieste di file (ad esempio nomefile.filetype) in una cartella specificata.Come servire file statici tramite Rack?

Rack :: Statico supporta solo le richieste di file per una cartella speciale (ad esempio "/ media").

Devo scrivere un proprio middleware Rack o esiste una soluzione pronta all'uso?

migliori saluti

risposta

36

Per reindirizzare ogni richiesta per un particolare percorso, utilizzare Rack::File (per qualche motivo questa classe è assente nel recente documentazione, ma è still part of l'ultimo Rack):

run Rack::File.new("/my/path") 

Per reindirizzare ogni richiesta, e aggiungere un indice HTML di tutti i file nella directory di destinazione, utilizzare Rack::Directory:

run Rack::Directory.new("/my/path") 

Per combinare diverse directory o servono solo a alcune richieste dalla dir bersaglio:

map "/url/prefix" do 
    run Rack::File.new("/my/path") 
end 

# More calls to map if necessary... 

# All other requests. 
run MyApp.new 
+0

Ho dovuto concludere la corsa MyApp.new con la mappa "/" do .. end. In caso contrario, ricevevo un errore del metodo di chiamata non definito. (Nessuna idea del perché.) –

9

si potrebbe essere in grado di utilizzare Rack::File direttamente. Ecco un file config.ru è possibile inserirla in rackup per vedere il lavoro:

app = proc do |env| 
    Rack::File.new('foo/bar').call(env) 
end 

run app 
2
run Rack::Directory.new(Dir.pwd) 
9

Un aggiornamento, l'ultima implementazione rack consente di utilizzare Rack::Static

Esempio:

use Rack::Static, :urls => ["/media"] 

Serve tutte le risorse statiche nella cartella ./media relativa alla posizione config.ru.

Problemi correlati