Как обслуживать статические файлы через Rack?

StackOverflow https://stackoverflow.com/questions/2265036

  •  20-09-2019
  •  | 
  •  

Вопрос

В настоящее время я разрабатываю приложение на базе стойки и хочу перенаправлять все запросы к файлам (напримеримя файла.тип файла) в указанную папку.

Rack::Static поддерживает запросы файлов только для специальной папки (например"/сми").

Должен ли я писать собственное промежуточное программное обеспечение для стойки или существует готовое решение?

С наилучшими пожеланиями

Это было полезно?

Решение

Чтобы перенаправить каждый запрос по определенному пути, используйте Rack::File (по какой-то причине этот класс отсутствует в недавней документации, но он есть все еще часть новейшая стойка):

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

Чтобы перенаправлять каждый запрос и добавлять HTML-индекс всех файлов в целевой каталог, используйте Rack::Directory:

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

Объединить несколько каталогов или обслуживать только некоторые запросы из целевого каталога:

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

# More calls to map if necessary...

# All other requests.
run MyApp.new

Другие советы

Обновление, последняя реализация Rack позволяет вам использовать Стойка::Статическая

Пример:

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

Будет обслуживать все статические ресурсы под ./media папка относительно config.ru Расположение.

Возможно, вы смогли бы использовать Rack::File напрямую.Вот такой config.ru файл, который вы можете подключить к rackup, чтобы увидеть, как он работает:

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

run app
run Rack::Directory.new(Dir.pwd)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top