¿Cómo servir archivos estáticos a través de rack?
Pregunta
Actualmente estoy desarrollando una aplicación basada en rack y quiero redirigir todas las peticiones de archivo (por ejemplo). Filename.filetype en una carpeta especificada.
rack :: estático sólo admite solicitudes de archivos de una carpeta especial (por ejemplo. "/ Media").
¿Tengo que escribir un rack propio middleware o hace una solución fuera de la caja existe?
Saludos
Solución
Para redirigir cada solicitud a un camino en particular, utilizar Rack::File
( por alguna razón esta clase está ausente en la documentación reciente, pero es href="http://github.com/rack/rack/blob/master/lib/rack/file.rb" todavía parte de la última rack):
run Rack::File.new("/my/path")
Para redirigir todas las peticiones, y añadir un índice de todos los archivos HTML en el directorio de destino, utilice Rack::Directory
:
run Rack::Directory.new("/my/path")
Para 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
Otros consejos
Una actualización, la última versión rack permite el uso de rack :: estático
Ejemplo:
use Rack::Static, :urls => ["/media"]
servirá a todos los recursos estáticos bajo ./media
carpeta relativa a config.ru
ubicación.
Usted puede ser capaz de utilizar Rack::File
directamente. 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
run Rack::Directory.new(Dir.pwd)