一个域,Heroku上的两个rails应用程序

时间:2017-05-14 16:38:04

标签: ruby-on-rails ruby heroku hosting

我正在构建一个多租户Rails 5应用程序(将在heroku上托管)(使用公寓宝石),其客户端将由子域定义,例如: 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提供

我怀疑由于相同的网址结构可能无法登录/更高位,所以我可能需要在app.example.com/sign_up或甚至在Rails App下为其构建一个额外的逻辑任何建议如何以更好的方式建立这一点将不胜感激!

2 个答案:

答案 0 :(得分:0)

不要认为你可以在根目录下安装两个应用程序。如果您愿意在子目录下命名您的Devise路径,例如,您可能能够实现此目的。 /session/sign_up/session/sign_in

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

这会使身份验证变得更加复杂,因为您的会话身份验证Cookie将位于您的根域而不是您的各个子域下。您可能需要使用domain: :all中的domain: .<domain>.cominitializers/session_store.rb选项与子域共享Cookie。 secret_key_base也需要在所有应用中保持一致。

您还需要使用Devise的会话创建,以便在登录时重定向到用户的正确子域。有趣的事实要考虑 - 如果用户在多个子域上拥有帐户,该怎么办?同样的邮箱? Devise / Warden范围可能提供了一种处理它的方法。

在Heroku方面:

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

答案 1 :(得分:0)

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