【问题标题】:One domain, two rails apps on HerokuHeroku 上的一个域,两个 Rails 应用程序
【发布时间】:2017-10-13 11:10:58
【问题描述】:

我目前正在构建一个多租户 Rails 5 应用程序(将托管在 heroku)(使用公寓 gem),它的客户端将由子域限定,例如client1.example.com、client2.example.com、client3.example.com。一切看起来都很简单,但我很想为网站的其余部分提供第二个 Rails 应用程序,例如example.com/pricing,example.com/faq。实现此设计的最佳解决方案是什么:

  • example.com/pricing - 由 Rails App 1 提供服务
  • example.com/faq - 由 Rails App 1 提供服务
  • example.com/{sign_in | sign_up} - 由 Rails App 2 提供服务
  • clientX.example.com/{projects |简介 |其他东西} - 由 Rails App 2 提供服务

我怀疑由于相同的 URL 结构可能无法登录/向上位,因此我可能需要在 app.example.com/sign_up 甚至在 Rails App 下为其构建额外的逻辑1.任何建议如何以更好的方式构建它都将不胜感激!

【问题讨论】:

标签: ruby-on-rails ruby heroku hosting


【解决方案1】:

有点担心这会因“过于宽泛”而被关闭,但这里的一个简单解决方案是对 Rails 应用程序 1 执行 heroku domains:add www.example.comheroku domains:add example.com。然后在 Rails 应用程序 2 上执行 heroku domains:add *.example.com 并让两个完全独立Heroku 上的应用程序。

【讨论】:

  • 谢谢,史蒂夫!这就是我正在寻找的东西,今天将通过演示应用程序尝试一下,看看它是如何进行的,但如果是这样的话 - 向你致敬!
【解决方案2】:

不要以为可以在根目录下挂载两个应用。如果您愿意在子目录下命名您的设计路径,您可能能够实现这一点,例如。 /session/sign_up/session/sign_in

这将需要一个额外的应用程序(应用程序 3),它只运行在 /sessions 子目录下加载和部署的设计。您需要为此应用配置relative url root

这将使身份验证更加复杂,因为您的会话身份验证 cookie 将位于您的根域而不是您的各个子域下。您可能需要使用initializers/session_store.rb 中的domain: :alldomain: .<domain>.com 选项与子域共享cookie。 secret_key_base 在您的所有应用程序中也需要相同。

您还需要使用 Devise 的会话创建功能,以便在用户登录时重定向到正确的子域。想想有趣的事实 - 如果用户在多个子域中拥有相同电子邮件的帐户怎么办?设计/看守范围可能会提供一种处理方法。

在 Heroku 方面:

Heroku 只能将一个域的请求路由到一个应用程序(应用程序 1)。上面发布的 Rack 反向代理将允许您将身份验证请求路由到 App 3。对于要路由到 App 2 的单个子域请求,您需要将每个子域作为单独的自定义域添加到 App 2。

【讨论】:

  • 嗯,好的,这种有道理。可能我会尝试采用一种厚颜无耻的方法并将注册流程集成到 App 1(连接到与 App 2 相同的数据库),并在成功注册后将用户重定向到 .example.com/sign_in,因为我相信我应该能够将 example.com 作为独立应用程序运行,同时在应用程序 2 上捕获通配符子域
  • 啊,看起来应该可以。似乎根域/子域/通配符子域可以分布在不同的 Heroku 应用程序中,只要它们都归同一个用户所有。
猜你喜欢
  • 2011-01-08
  • 2014-10-14
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多