我目前正在开发一个基于Rack的应用程序,并希望将所有文件请求(例如filename.filetype)重定向到指定的文件夹。如何通过Rack提供静态文件?
Rack :: Static仅支持特殊文件夹(例如“/ media”)的文件请求。
我是否必须编写一个自己的Rack中间件,或者有一个开箱即用的解决方案吗?
问候
我目前正在开发一个基于Rack的应用程序,并希望将所有文件请求(例如filename.filetype)重定向到指定的文件夹。如何通过Rack提供静态文件?
Rack :: Static仅支持特殊文件夹(例如“/ media”)的文件请求。
我是否必须编写一个自己的Rack中间件,或者有一个开箱即用的解决方案吗?
问候
重定向每一个请求到一个特定的路径,使用Rack::File
(由于某种原因,这个类是近期文档中不存在的,但它是still part of最新机架):
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
你也许能够直接使用Rack::File
。这里有一个config.ru
文件,你可以插入rackup看到它的工作:
app = proc do |env|
Rack::File.new('foo/bar').call(env)
end
run app
run Rack::Directory.new(Dir.pwd)
的更新,最新的机架实现允许你使用Rack::Static
例子:
use Rack::Static, :urls => ["/media"]
将提供./media
文件夹下相对于config.ru
位置的所有静态资源。
我不得不用包裹运行MyApp.new与地图“/”做..结束。否则,我得到一个未定义的调用方法错误。 (不知道为什么。) – 2011-04-05 00:31:15