0

我有一个机架空间云服务器,我在上面托管一个 Sinatra 应用程序。我的应用程序中有一个公共目录,用于存储我当前的样式、脚本等。我还有其他文件,但我不想在每次部署时都更新和传输。我正在使用 git 和 Vlad 进行部署,所以为了避免这种情况,我目前的流程是

  • 进行本地更改和更新
  • 更新我的本地仓库
  • 推送到 git
  • 运行 vlad:更新
  • 然后手动 ssh 进入我的服务器并将项目中我想要的 mp3 和其他内容 mv 到当前版本的公共文件夹

简而言之,我希望能够访问我的用户文件夹中提供的文件,或者理想情况下还可以选择访问具有权限的服务器文件上的另一个用户,这样我就不需要总是将它们移动到当前版本手。

谢谢

4

1 回答 1

0

假设您想直接从 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::TryStaticrack-contrib:

require 'rack/contrib' #install rack-contrib first
use Rack::TryStatic, :urls => ['/'], :root => '/home/other_user/files/mp3s'

如果您使用其中任何一个,您可能需要确保只在正确的环境中配置中间件,否则在查找不存在的目录时会出现开发错误。

于 2011-12-18T19:25:12.380 回答