2010-02-15 14 views
36

Actualmente estoy desarrollando una aplicación basada en Rack y quiero redirigir todas las solicitudes de archivos (por ejemplo, filename.filetype) a una carpeta específica.¿Cómo se sirven los archivos estáticos a través de Rack?

Rack :: Static solo admite solicitudes de archivos para una carpeta especial (por ejemplo, "/ media").

¿Debo escribir un propio middleware Rack o existe una solución lista para usar?

Saludos

Respuesta

36

Para redirigir todas las peticiones a un camino en particular, utilizar Rack::File (por alguna razón esta clase está ausente en la documentación reciente, pero es still part of la última rack):

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

Para redirigir todas las peticiones, y añadir un índice HTML de todos los archivos en el directorio de destino, utilice Rack::Directory:

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

combinar varios directorios o servir sólo a algunas peticiones del directorio de destino:

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

# More calls to map if necessary... 

# All other requests. 
run MyApp.new 
+0

Tuve que ajustar la ejecución MyApp.new con el mapa "/" do .. end. De lo contrario, recibí un error de método de llamada no definido. (No tengo idea de por qué) –

9

Usted puede ser capaz de utilizar directamente Rack::File. Aquí hay un archivo config.ru se puede conectar a rackup para ver que funcione:

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

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

una actualización, la última versión del estante le permite utilizar Rack::Static

Ejemplo:

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

Servirá todos los recursos estáticos en la carpeta ./media relativa a la ubicación config.ru.

Cuestiones relacionadas