一个域,Heroku 上的两个 rails 个应用程序
One domain, two rails apps on Heroku
我目前正在构建一个多租户 Rails 5 应用程序(将托管在 heroku)(使用公寓 gem),其客户端将按子域范围划分,例如client1.example.com、client2.example.com、client3.example.com。一切看起来都很简单,但我很想为网站的其余部分提供第二个 Rails 应用程序,例如例子.com/pricing,例子.com/faq。实现此设计的最佳解决方案是什么:
- 示例。com/pricing - 由 Rails 应用程序 1
提供服务
- 示例。com/faq - 由 Rails 应用程序 1
提供服务
- example.com/{sign_in | sign_up} - 由 Rails 应用程序 2
提供服务
- clientX.example.com/{项目 |概况 |其他内容} - 由 Rails App 2
提供
我怀疑符号 in/up 位可能由于相同的 URL 结构而无法实现,因此我可能需要在 [=36= 下为其构建额外的逻辑].com/sign_up 甚至在 Rails App 1 下。任何关于如何以更好的方式构建它的建议将不胜感激!
不要以为根目录下可以挂载两个app。如果您愿意在子目录下命名您的 Devise 路径,例如,您可能能够实现这一目标。 /session/sign_up
和 /session/sign_in
这将需要一个额外的应用程序(应用程序 3),它只运行 Devise 加载并部署在 /sessions
子目录下。您需要为此应用配置 relative url root。
这将使身份验证更加复杂,因为您的会话身份验证 cookie 将位于您的根域下,而不是您的各个子域下。您可能需要使用 initializers/session_store.rb
中的 domain: :all
或 domain: .<domain>.com
选项来与子域共享 cookie。 secret_key_base
还需要在所有应用中保持一致。
您还需要尝试使用 Devise 的会话创建功能,以便在用户登录时重定向到正确的子域。有趣的是,如果用户在多个子域上拥有使用同一封电子邮件的帐户怎么办? Devise/Warden 范围可能会提供一种处理方法。
在 Heroku 方面:
Heroku 只能将对一个域的请求路由到一个应用程序(应用程序 1)。上面发布的 Rack 反向代理将允许您将身份验证请求路由到 App 3。对于要路由到 App 2 的单个子域请求,您需要将每个子域作为单独的自定义域添加到 App 2。
有点担心这会被 "overly broad" 关闭,但这里的一个简单解决方案是对 Rails 应用程序 1 执行 heroku domains:add www.example.com
和 heroku domains:add example.com
。然后 heroku domains:add *.example.com
在 Rails 应用程序 2 上,并在 Heroku 上有两个完全独立的应用程序。
我目前正在构建一个多租户 Rails 5 应用程序(将托管在 heroku)(使用公寓 gem),其客户端将按子域范围划分,例如client1.example.com、client2.example.com、client3.example.com。一切看起来都很简单,但我很想为网站的其余部分提供第二个 Rails 应用程序,例如例子.com/pricing,例子.com/faq。实现此设计的最佳解决方案是什么:
- 示例。com/pricing - 由 Rails 应用程序 1 提供服务
- 示例。com/faq - 由 Rails 应用程序 1 提供服务
- example.com/{sign_in | sign_up} - 由 Rails 应用程序 2 提供服务
- clientX.example.com/{项目 |概况 |其他内容} - 由 Rails App 2 提供
我怀疑符号 in/up 位可能由于相同的 URL 结构而无法实现,因此我可能需要在 [=36= 下为其构建额外的逻辑].com/sign_up 甚至在 Rails App 1 下。任何关于如何以更好的方式构建它的建议将不胜感激!
不要以为根目录下可以挂载两个app。如果您愿意在子目录下命名您的 Devise 路径,例如,您可能能够实现这一目标。 /session/sign_up
和 /session/sign_in
这将需要一个额外的应用程序(应用程序 3),它只运行 Devise 加载并部署在 /sessions
子目录下。您需要为此应用配置 relative url root。
这将使身份验证更加复杂,因为您的会话身份验证 cookie 将位于您的根域下,而不是您的各个子域下。您可能需要使用 initializers/session_store.rb
中的 domain: :all
或 domain: .<domain>.com
选项来与子域共享 cookie。 secret_key_base
还需要在所有应用中保持一致。
您还需要尝试使用 Devise 的会话创建功能,以便在用户登录时重定向到正确的子域。有趣的是,如果用户在多个子域上拥有使用同一封电子邮件的帐户怎么办? Devise/Warden 范围可能会提供一种处理方法。
在 Heroku 方面:
Heroku 只能将对一个域的请求路由到一个应用程序(应用程序 1)。上面发布的 Rack 反向代理将允许您将身份验证请求路由到 App 3。对于要路由到 App 2 的单个子域请求,您需要将每个子域作为单独的自定义域添加到 App 2。
有点担心这会被 "overly broad" 关闭,但这里的一个简单解决方案是对 Rails 应用程序 1 执行 heroku domains:add www.example.com
和 heroku domains:add example.com
。然后 heroku domains:add *.example.com
在 Rails 应用程序 2 上,并在 Heroku 上有两个完全独立的应用程序。