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

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

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

我是否必须编写一个自己的Rack中间件,或者有一个开箱即用的解决scheme?

最好的祝福

为了将每个请求redirect到一个特定的path,使用Rack::File (出于某种原因,这个类在最近的文档中是没有的,但它仍然是最新的Rack的一部分 ):

 run Rack::File.new("/my/path") 

要redirect每个请求,并添加目标目录中所有文件的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 

您可以直接使用Rack::File 。 这是一个config.ru文件,你可以插入rackup看到它的工作:

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

更新,最新的机架实施允许您使用Rack :: Static

例:

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

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

 run Rack::Directory.new(Dir.pwd)