假設你想直接從西納特拉服務於靜態文件(即你沒有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'
如果您使用的這些,你可能需要確保你只在正確配置中間件環境,否則在尋找不存在的目錄時會遇到開發中的錯誤。
難道你不能只是從應用程序的公共文件夾創建符合鏈接到你需要的目錄? –