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

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top