如何通过Rack提供静态文件?

bra*_*fck 38 ruby static rack file

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

Rack :: Static仅支持特殊文件夹的文件请求(例如"/ media").

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

最好的祝福

mol*_*olf 38

要将每个请求重定向到特定路径,请使用Rack::File(出于某种原因,在最近的文档中缺少此类,但它仍然是最新Rack的一部分):

run Rack::File.new("/my/path")
Run Code Online (Sandbox Code Playgroud)

要重定向每个请求,并添加目标目录中所有文件的HTML索引,请使用Rack::Directory:

run Rack::Directory.new("/my/path")
Run Code Online (Sandbox Code Playgroud)

要组合多个目录或仅提供来自目标目录的一些请求:

map "/url/prefix" do
  run Rack::File.new("/my/path")
end

# More calls to map if necessary...

# All other requests.
run MyApp.new
Run Code Online (Sandbox Code Playgroud)


Sri*_*lan 11

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

例:

use Rack::Static, :urls => ["/media"]
Run Code Online (Sandbox Code Playgroud)

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


kej*_*len 10

您可以Rack::File直接使用.这是一个config.ru可以插入Rackup 的文件,看它是否有效:

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

run app
Run Code Online (Sandbox Code Playgroud)