我试图为我的博客托管多个rails应用程序。有点像www.blog.com/app1将有一个rails应用程序,www.blog.com / app2将有另一个。我该怎么做?
答案 0 :(得分:3)
虽然我同意第一条评论所指出的downvotes,但几个月前我自己遇到了这个问题,实际上甚至没有尝试解决它,因为我意识到这有多少含义。 Stack Overflow上的现有答案可以解决稍微不同或更窄的问题,因此他们可能会使用这里提到的一些内容,但没有详细说明含义或替代方案,但还有interesting overview(以及该问题的其他答案)。无论如何,我把它作为挑战并潜入其中。
首先,根据您的情况,有多种方法:
relative_url_root
,允许deployment to subdirectories。它非常脆弱,经常出现问题,许多宝石或引擎在您使用时会中断,所以要小心。当你做对了,它看起来像魔术。但是,与子目录相关的配置将分散在不同的软件配置和代码中。我在探索最后一个选项时创建了example repository。 README应该说出运行代码所需的一切。
这个小项目最重要的一点是,当使用相对URL root时,你几乎肯定想要扩展所有路由的范围。可能有不同的设置,但它们更复杂(这并不意味着它们没有意义)。有关示例,请参阅answer with overview mentioned above
默认情况下(没有作用域路由),只有资产路径以相对URL根作为前缀,而不是行动路径路径,即使它使助手生成的URL无用,除非由mod_proxy_html
或更多自定义解决方案进行翻译。
其他重要的观察,与官方指南相关,代码“在那里”以及Stack Overflow上类似问题的答案,是在相对URL根的开头避免正斜杠是很好的。它在测试和其余代码之间的行为不一致。然而,它可以很好地用于代码 - 请参阅scope definition in routes config或dummy controller test case。
我通过创建两个非常简单且几乎相同的Rails 5.2应用程序来完成这些和其他观察。每个都有一个动作(dummy#action
),其中有一条路线scoped to relative URL root。这个操作,或its view专门做了两件重要事情来验证一切正常:
root_path
帮助器的结果,显示我们已正确设置URL /路径助手(感谢config/routes.rb
中的作用域路径)image_path
helper引用您可以看到虚拟主机配置包含相当广泛的URL列表,这些URL不应通过代理传递并依赖别名目录。但是,这是特定于应用程序并且非常易于配置,因此使用不同目录布局的简单设置绝对可以实现,但完全是独立的主题。
如果您喜欢Passenger并且不想在HTTP服务器中使用代理,则可以找到more information in their deployment tutorial。