我有一个机架式云服务器,我正在托管Sinatra应用程序。我在我的应用程序中有一个公共目录,我存储我当前的样式,脚本等。我有其他文件虽然我不想更新和转移每个部署。我正在使用git和Vlad进行部署,以避免我当前的进程
简而言之,我希望能够访问我的用户文件夹中提供的文件,或者理想情况下也可以选择访问具有权限的服务器文件上的其他用户,这样我就不需要始终将它们移动到目前手动释放。
感谢
答案 0 :(得分:0)
假设您想直接从Sinatra提供静态文件(即您没有设置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']
。
如果您希望能够访问网址“基数”的文件,例如http://example.com/foo.mp3
,那么Rack::Static
就无法使用。在这种情况下,我们需要针对目录检查每个请求,如果存在匹配文件,则继续请求继续。 (当检查public
目录时,Sinatra本身必须做这样的事情。)
实现这一目标的最简单方法可能是使用来自rack-contrib的Rack::TryStatic
:
require 'rack/contrib' #install rack-contrib first
use Rack::TryStatic, :urls => ['/'], :root => '/home/other_user/files/mp3s'
如果您使用其中任何一种,您可能需要确保只在适当的环境中配置中间件,否则在查找不存在的目录时,您将在开发中遇到错误。