2011-12-12 56 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' 

如果您使用的这些,你可能需要确保你只在正确配置中间件环境,否则在寻找不存在的目录时会遇到开发中的错误。

相关问题