Как обслуживать статические файлы через Rack? - PullRequest
38 голосов
/ 15 февраля 2010

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

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

Нужно ли писать собственное промежуточное программное обеспечение Rack или существует готовое решение?

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

Ответы [ 4 ]

38 голосов
/ 16 февраля 2010

Чтобы перенаправить каждый запрос на определенный путь, используйте 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
11 голосов
/ 22 августа 2014

Обновление, последняя реализация Rack позволяет использовать Rack :: Static

Пример:

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

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

10 голосов
/ 16 февраля 2010

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

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

run app
2 голосов
/ 18 сентября 2012
run Rack::Directory.new(Dir.pwd)
...