2011-12-12 50 views
0

我有一個rackspace雲服務器,我正在主持一個Sinatra應用程序。我在我的應用程序中有一個公共目錄,用於存儲我的當前樣式,腳本等。雖然我不想更新和傳輸每個部署,但我還有其他文件。我使用Git和弗拉德部署所以要避免這種情況我目前的進程是從Sinatra應用程序訪問存儲在服務器上的文件

  • 進行本地更改和更新
  • 更新我的本地回購
  • 推動與git
  • 運行弗拉德:更新
  • 然後手動ssh到我的服務器和MV中的項目,我想在MP3和其他的東西,以目前的版本公用文件夾

總之,我會如T o能夠訪問在我的用戶文件夾中提供的文件,或者理想的情況下還可以選擇通過權限訪問服務器文件上的其他用戶,這樣我就不需要總是手動將它們移動到當前版本。

感謝

+1

難道你不能只是從應用程序的公共文件夾創建符合鏈接到你需要的目錄? –

回答

0

假設你想直接從西納特拉服務於靜態文件(即你沒有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' 

如果您使用的這些,你可能需要確保你只在正確配置中間件環境,否則在尋找不存在的目錄時會遇到開發中的錯誤。

相關問題