首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在同一台服务器上托管多个Rails应用程序

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

Stack Overflow用户
提问于 2018-06-09 00:01:39
回答 1查看 1.4K关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 06:51:27

虽然我同意第一条评论指出的反对意见,但我自己几个月前就遇到了这个问题,实际上我甚至没有尝试解决它,因为我意识到这有多少影响。关于堆栈溢出的现有答案要么略有不同,要么解决了范围更窄的问题,所以他们可能会使用这里提到的一些东西,但没有详细说明含义或替代方案,但有一个interesting overview (以及对该问题的其他答案)。无论如何,我把它当作一种挑战,一头扎进水里。

首先,根据您的场景,有多种方法:

  1. 所有的应用程序都是你需要维护的代码--探索一种叫做engines的东西可能是最好的。它们就像小型RoR应用程序,可以挂载到普通RoR应用程序中的某个路径。它有许多好处,如共享相同的运行时或简单的隔离配置就地
  2. 如果没有AJAX的网址或类似的动态,或者他们实际上是AHAH (即,异步超文本标记语言和超文本传输协议返回的超文本标记语言片段,而不是XML或JSON数据),这是非常自然的Rails虽然经常不使用,你可以使用复杂的代理模块,如mod_proxy_html,它重写链接内的超文本标记语言文档,同时代理。nginx有类似的模块,但不是标准distribution.
  3. RoR的一部分,它有一个允许deployment to subdirectories的配置选项relative_url_root。它非常脆弱,而且经常有buggy,当你使用它时,许多宝石或引擎都会坏掉,所以要小心。当你做对了,它看起来就像魔术。但是,与子目录相关配置将分散在不同的软件配置和代码中。

在探索最后一个选项时,我创建了一个example repositoryREADME应该说出运行代码所需的所有信息。

这个小项目中最重要的观察结果是,当使用相对URL根时,您几乎肯定想要确定所有路由的范围。有可能有不同的设置,但它们甚至更复杂(这并不意味着它们没有意义)。有关示例,请参阅answer with overview mentioned above

默认情况下(没有限定范围的路由),只有资源路径以相对URL根为前缀,而不是操作路由路径,即使这使得帮助器生成的URL无用,除非由mod_proxy_html或更自定义的解决方案转换。

另一个重要的观察,与官方指南,代码“在那里”和类似问题的答案在堆栈溢出,是好的,避免在相对URL根的开始的正斜杠。它在测试和其余代码之间的行为不一致。然而,它可以很好地用于您的代码-参见scope definition in routes configdummy controller test case

通过创建两个非常简单但几乎完全相同的Rails 5.2应用程序,我得到了上述和其他观察结果。每个都有一个具有路由scoped to relative URL root的操作(dummy#action)。此操作或its view专门做两件重要的事情来验证一切是否正常:

  • 它输出调用root_path帮助器的结果,这表明我们已经正确设置了root_path/路径帮助器(这要归功于image_path加载静态资产中的范围路由,这些静态资产不是由Rails应用程序提供服务的,而是由Apache HTTP Server直接提供的,并且由image_path helper

引用

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

如果你喜欢Passenger,并且不想在你的服务器上使用代理,你可以找到more information in their deployment tutorial

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50764456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档