繁体   English   中英

在同一台服务器上托管多个 Rails 应用程序

[英]Host multiple Rails apps on the same server

我正在尝试为我的博客托管多个 Rails 应用程序。 有点像 www.blog.com/app1 会有一个 rails 应用程序,www.blog.com/app2 会有另一个。 我该怎么做?

尽管我同意第一条评论所指出的反对票,但几个月前我自己也遇到了这个问题,实际上我什至没有尝试解决它,因为我意识到这有多少影响。 Stack Overflow 上的现有答案解决了稍微不同或更窄的问题,因此他们可能会使用这里提到的一些内容,但没有详细说明含义或替代方案,但有一个有趣的概述(以及该问题的其他答案)。 无论如何,我将其视为挑战并潜入其中。

首先,根据您的情况,有多种方法:

  1. 所有应用程序都是您维护的代码——探索称为引擎的东西可能是最好的。 它们就像迷你 RoR 应用程序,可安装到普通 RoR 应用程序中的特定路径。 它有很多好处,例如共享相同的运行时或就地配置的简单隔离。
  2. 如果没有带有 URL 或类似动态的 AJAX,或者它们实际上是 AHAH(即异步 HTML 和 HTTP – 返回 HTML 片段而不是 XML 或 JSON 数据),这对于 Rails 来说是非常自然的,尽管经常不使用,您可以使用复杂的代理像mod_proxy_html这样的模块在代理时重写 HTML 文档中的链接。 nginx 也有类似的模块,但不是标准发行版的一部分。
  3. RoR 有一个配置选项relative_url_root ,它允许部署到子目录 它非常脆弱且经常出现故障,使用时许多宝石或引擎会损坏,所以要小心。 当你做对了,它看起来就像魔法一样。 但是,与子目录相关的配置将分散在不同的软件配置和代码中。

我在探索最后一个选项时创建了一个示例存储库 README应该说明运行代码所需的一切。

这个小项目最重要的观察结果是,当使用相对 URL 根时,您几乎肯定希望对所有路由进行范围。 可能有不同的设置,但它们甚至更复杂(这并不意味着它们没有意义)。 有关示例,请参阅上面提到的概述答案
默认情况下(没有作用域路由),只有资产路径以相对 URL 根为前缀,而不是操作路由路径,即使它使帮助程序生成的 URL 无用,除非由mod_proxy_html或可能更多的自定义解决方案翻译。

其他与官方指南、“out there”代码以及类似问题的答案有关的其他重要观察是在相对 URL 根的开头避免正斜杠。 它在测试和其余代码之间的行为不一致。 然而,它可以很好地用于您的代码 - 请参阅路由配置虚拟控制器测试用例中的范围定义


我通过创建两个非常简单且几乎相同的 Rails 5.2 应用程序来获得这些和其他观察结果。 每个都有一个动作( dummy#action ),它的路由范围为相对 URL root 此操作或其视图专门做了两件重要的事情来验证一切正常:

  • 它输出调用root_path helper 的结果,这表明我们已经正确设置了 URL/path helper(感谢config/routes.rb作用域路由)
  • 它加载静态资产,该资产不是由 Rails 应用程序提供的,而是由 Apache HTTP Server 直接提供的,并由image_path帮助程序引用

您可以看到虚拟主机配置具有相当广泛的 URL 列表,这些 URL 不应通过代理传递并依赖于别名目录。 但是,这是特定于应用程序且非常可配置的,因此使用不同的目录布局进行更简单的设置绝对是可以实现的,但完全是独立的主题。

如果您喜欢Passenger 并且不想在您的HTTP 服务器中使用代理,您可以在他们的部署教程中找到更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM