设置Sinatra以在子目录中运行

时间:2011-09-28 02:14:04

标签: ruby apache sinatra

现在我对Sinatra / Ruby / Apache很新,但继承了要部署的Sinatra应用程序。

目前Apache已设置为从文档根目录(httpdocs)运行,我需要在文件夹子目录下运行ruby应用程序,例如:/ httpdocs / webapp

我需要做些什么才能在子目录下启动并运行?

2 个答案:

答案 0 :(得分:2)

此链接可能会有所帮助,它解释了如何使用Passenger(mod_rack)与Apache部署Sinatra应用程序: Deploying a Sinatra App with Apache and Phusion Passenger

您特别感兴趣的部分是虚拟主机配置中的RackBaseURI选项。官方文档可在此处获得: Phusion Passenger users guide - Deploying Rack to Sub URI

答案 1 :(得分:1)

我只是遇到了同样的问题。由于这里没有关于没有乘客的情况下如何执行此操作的答案,因此我将记录Apache + CGI或FastCGI的解决方案。

诀窍是为Rack重写PATH_INFO,一切都将就绪:

  1. 设置.htaccess

     RewriteEngine On
     RewriteRule ^(.*)$ sinatra_app.cgi [QSA,L,E=PATHINFO:/$1]
    
  2. 在您的Sinatra代码中,除此之外:

     ENV['PATH_INFO'] = ENV['REDIRECT_PATHINFO']
    

现在,所有类似/subfolder/resource/123的URL都将在Sinatra应用中找到正确的路由。
在上述情况下,假设将Sinatra应用程序放到get '/resource/:id'中,/subfolder将可以正常工作。