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

时间:2010-02-15 09:49:28

标签: ruby file static rack

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

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

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

祝你好运

4 个答案:

答案 0 :(得分:38)

要将每个请求重定向到特定路径,请使用Rack::File(由于某种原因,最近的文档中没有此类,但still part of是最新的Rack):

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

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

答案 1 :(得分:11)

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

示例:

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

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

答案 2 :(得分:10)

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

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

run app

答案 3 :(得分:2)

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