40

我目前正在开发一个基于机架的应用程序,并希望将所有文件请求(例如filename.filetype)重定向到指定的文件夹。

Rack::Static仅支持对特殊文件夹(例如“/media”)的文件请求。

我是否必须编写自己的 Rack 中间件或是否存在开箱即用的解决方案?

4

4 回答 4

40

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
于 2010-02-16T07:18:03.550 回答
12

更新,最新的 Rack 实现允许您使用Rack::Static

例子:

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

将提供相对于位置的./media文件夹下的所有静态资源。config.ru

于 2014-08-22T06:44:48.073 回答
11

您可能可以Rack::File直接使用。这是一个config.ru文件,您可以将其插入 rackup 以查看它的工作原理:

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

run app
于 2010-02-16T06:25:00.780 回答
2
run Rack::Directory.new(Dir.pwd)
于 2012-09-18T00:26:10.220 回答