假设你想直接从西纳特拉服务于静态文件(即你没有Apache或Nginx的设立为他们服务),你可能能够使用Rack::Static
。这只有在静态文件全部来自其他位置的子目录时才会起作用。举例来说,如果你有一堆存储在/home/other_user/files/mp3s
的MP3音乐,并可以访问他们像http://example.com/mp3s/foo.mp3
,那么你可以use the middleware这样的:
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
从机架的contrib:
require 'rack/contrib' #install rack-contrib first
use Rack::TryStatic, :urls => ['/'], :root => '/home/other_user/files/mp3s'
如果您使用的这些,你可能需要确保你只在正确配置中间件环境,否则在寻找不存在的目录时会遇到开发中的错误。
难道你不能只是从应用程序的公共文件夹创建符合链接到你需要的目录? –