假设您想直接从 Sinatra 提供静态文件(即您没有设置 Apache 或 Nginx 来提供它们),您可能可以使用Rack::Static
. 这仅在静态文件全部来自其他位置的子目录时才有效。例如,如果您存储了一堆 mp3,/home/other_user/files/mp3s
并且您可以像这样访问它们,http://example.com/mp3s/foo.mp3
那么您可以像这样使用中间件:
use Rack::Static, :urls => ['/mp3s'], :root => '/home/other_user/files/mp3s'
如果您有其他要从中提供文件的子目录,例如“/images”,只需将它们添加到:urls
数组中::urls => ['/mp3s', '/images']
。
如果您希望能够访问 url 的“base”处的文件,例如http://example.com/foo.mp3
,那么将Rack::Static
无法正常工作。在这种情况下,我们需要根据目录检查每个请求,如果存在匹配的文件,则服务它,否则继续请求。public
(在检查其目录时,Sinatra 本身必须执行类似的操作)。
实现这一点的最简单方法可能是使用Rack::TryStatic
rack-contrib:
require 'rack/contrib' #install rack-contrib first
use Rack::TryStatic, :urls => ['/'], :root => '/home/other_user/files/mp3s'
如果您使用其中任何一个,您可能需要确保只在正确的环境中配置中间件,否则在查找不存在的目录时会出现开发错误。