我正在构建一个多租户Rails 5应用程序(将在heroku上托管)(使用公寓宝石),其客户端将由子域定义,例如: client1.example.com,client2.example.com,client3.example.com。一切看起来都非常简单,但我希望为网站的其余部分安装第二个Rails应用程序,例如example.com/pricing,example.com/faq。实现这一设计的最佳解决方案是什么:
我怀疑由于相同的网址结构可能无法登录/更高位,所以我可能需要在app.example.com/sign_up或甚至在Rails App下为其构建一个额外的逻辑任何建议如何以更好的方式建立这一点将不胜感激!
答案 0 :(得分:0)
不要认为你可以在根目录下安装两个应用程序。如果您愿意在子目录下命名您的Devise路径,例如,您可能能够实现此目的。 /session/sign_up
和/session/sign_in
这将需要一个额外的应用程序(应用程序3),它只运行在/sessions
子目录下加载和部署的Devise。您需要为此应用配置relative url root。
这会使身份验证变得更加复杂,因为您的会话身份验证Cookie将位于您的根域而不是您的各个子域下。您可能需要使用domain: :all
中的domain: .<domain>.com
或initializers/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.com
和heroku domains:add example.com
。然后在Rails应用2上heroku domains:add *.example.com
并且在Heroku上有两个完全独立的应用程序。