Como servir arquivos estáticos via rack?
Pergunta
Atualmente, estou desenvolvendo um aplicativo baseado em rack e desejo redirecionar todas as solicitações de arquivo (por exemplo, nome do arquivo.FileType) para uma pasta especificada.
O Rack :: Static suporta apenas solicitações de arquivo para uma pasta especial (por exemplo, "/mídia").
Tenho que escrever um middleware próprio ou existe uma solução pronta para uso?
Atenciosamente
Solução
Para redirecionar cada solicitação para um caminho específico, use Rack::File
(por algum motivo, esta classe está ausente na documentação recente, mas é ainda parte de o último rack):
run Rack::File.new("/my/path")
Para redirecionar todas as solicitações e adicionar um índice HTML de todos os arquivos no DIR do destino, use Rack::Directory
:
run Rack::Directory.new("/my/path")
Para combinar vários diretórios ou servir apenas alguns pedidos do DIR 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
Outras dicas
Uma atualização, a mais recente implementação do rack permite que você use Rack :: estático
Exemplo:
use Rack::Static, :urls => ["/media"]
Servirá a todos os recursos estáticos sob ./media
pasta em relação a config.ru
localização.
Você pode usar Rack::File
diretamente. Aqui está um config.ru
Arquivo que você pode conectar ao rackup para vê -lo funcionar:
app = proc do |env|
Rack::File.new('foo/bar').call(env)
end
run app
run Rack::Directory.new(Dir.pwd)