How to serve static files via Rack?

2019-01-12 23:51发布

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 an own Rack middleware or does a out-of-the-box solution exist?

Best regards

4条回答
疯言疯语
2楼-- · 2019-01-13 00:34

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
查看更多
聊天终结者
3楼-- · 2019-01-13 00:38
run Rack::Directory.new(Dir.pwd)
查看更多
我只想做你的唯一
4楼-- · 2019-01-13 00:42

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
查看更多
Ridiculous、
5楼-- · 2019-01-13 00:53

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.

查看更多
登录 后发表回答