Как обслуживать статические файлы через Rack?
Вопрос
В настоящее время я разрабатываю приложение на базе стойки и хочу перенаправлять все запросы к файлам (напримеримя файла.тип файла) в указанную папку.
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)