设置 Sinatra 在子目录中运行

发布于 2024-12-06 14:36:15 字数 176 浏览 1 评论 0原文

现在我对 Sinatra/Ruby/Apache 还很陌生,但继承了一个 Sinatra 应用程序来部署。

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

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

Now I am pretty new to Sinatra/Ruby/Apache but have inherited a Sinatra application to deploy.

Currently Apache is set up to run from a document root (httpdocs) and I need to run a ruby application underneath a folder subdirectory such as: /httpdocs/webapp

What do I need to do to get this up and running under a subdirectory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深海少女心 2024-12-13 14:36:15

此链接可能会有所帮助,它解释了如何使用 Passenger (mod_rack) 通过 Apache 部署 Sinatra 应用程序:
部署带有 Apache 和 Phusion Passenger 的 Sinatra 应用程序

您特别感兴趣的部分是虚拟主机配置中的 RackBaseURI 选项。官方文档可以在这里找到:
Phusion Passenger 用户指南 - 将机架部署到子 URI

This link might be helpful, it explains how to deploy a Sinatra app with Apache using Passenger (mod_rack):
Deploying a Sinatra App with Apache and Phusion Passenger

The part of particular interest to you is the RackBaseURI option in the virtual host configuration. The official documentation is available here:
Phusion Passenger users guide - Deploying Rack to Sub URI

吾家有女初长成 2024-12-13 14:36:15

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

诀窍是为 Rack 重写 PATH_INFO,一切都会就位:

  1. 设置 .htaccess

     RewriteEngine 开启
     RewriteRule ^(.*)$ sinatra_app.cgi [QSA,L,E=PATHINFO:/$1]
    
  2. 在您的 Sinatra 代码中,首先:

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

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

I just ran into the same issue. Since there was no answer here for how to do this without Passenger, I'm going to document the solution for Apache + CGI or FastCGI.

The trick is to rewrite PATH_INFO for Rack, and everything will fall into place:

  1. Set up .htaccess:

     RewriteEngine On
     RewriteRule ^(.*)$ sinatra_app.cgi [QSA,L,E=PATHINFO:/$1]
    
  2. In your Sinatra code, before anything else:

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

Now all URLs like /subfolder/resource/123 will hit the correct route in the Sinatra app.
In the above case get '/resource/:id' will work correctly, assuming the Sinatra app was put into /subfolder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文