2010-02-15 6 views
36

Ich entwickle gerade eine Rack-basierte Anwendung und möchte alle Dateianforderungen (z. B. filename.filetype) in einen angegebenen Ordner umleiten.Wie stehe ich statische Dateien über das Rack bereit?

Rack :: Static unterstützt nur Dateianforderungen für einen speziellen Ordner (z. B. "/ media").

Muss ich eine eigene Rack-Middleware schreiben oder gibt es eine Out-of-the-Box-Lösung?

Mit freundlichen Grüßen

Antwort

36

Um jede Anforderung an einen bestimmten Pfad zu umleiten, verwenden Rack::File (aus irgendeinem Grund dieser Klasse in den letzten Dokumentation fehlt, aber es ist still part of spätestens Rack):

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

jede Anfrage zu umleiten, und fügen Sie ein HTML-Index aller Dateien im Zielverzeichnis verwenden Rack::Directory:

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

Um mehrere Verzeichnisse zu kombinieren oder nur einige Anfragen aus dem Zielverzeichnis dienen:

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

# More calls to map if necessary... 

# All other requests. 
run MyApp.new 
+0

Ich musste den Lauf MyApp.new mit Karte "/" do .. Ende wickeln. Sonst bekam ich einen undefinierten Aufruf-Methodenfehler. (Keine Ahnung warum.) –

9

Sie könnten in der Lage sein Rack::File direkt zu verwenden. Hier ist eine config.ru Datei, die Sie in rackup anschließen können, um zu sehen es:

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

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

Ein Update, das letzte Rack-Implementierung ermöglicht es Ihnen, Rack::Static

Beispiel zu verwenden:

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

Wird alle statischen Ressourcen unter ./media Ordner relativ zu config.ru Speicherort dienen.

Verwandte Themen