How to serve static files via Rack?
I am currently developing a Rack-based application and want to redirect all file requests (e.g. filename.filetype
) to a specified folder.
Rack::Static
only supports file requests for a special folder(e.g. "/media").
Do I have to write my own Rack middleware or does an ou开发者_StackOverflowt-of-the-box solution exist?
To redirect every request to a particular path, use Rack::File
(for some reason this class is absent in recent documentation, but it is still part of the latest Rack):
run Rack::File.new("/my/path")
To redirect every request, and add an HTML index of all files in the target dir, use Rack::Directory
:
run Rack::Directory.new("/my/path")
To combine several directories or serve only a some requests from the target dir:
map "/url/prefix" do
run Rack::File.new("/my/path")
end
# More calls to map if necessary...
# All other requests.
run MyApp.new
An update, the latest Rack implementation allows you to use Rack::Static
Example:
use Rack::Static, :urls => ["/media"]
Will serve all static resources under ./media
folder relative to config.ru
location.
You might be able to use Rack::File
directly. Here's a config.ru
file you can plug into rackup to see it work:
app = proc do |env|
Rack::File.new('foo/bar').call(env)
end
run app
run Rack::Directory.new(Dir.pwd)
精彩评论