我来自 Java 世界,是 Rails 的新手。我开发了一个中等大小的 Rails 3.2 业务应用程序。现在是开发第二个应用程序以及“门户”应用程序以允许用户访问这些应用程序并提供管理用户和角色管理的时候了。
单点登录是一项要求(登录到门户一次,然后能够访问您有权访问的应用程序),并且有许多基本的域模型需要在应用程序之间共享。此外,这些应用程序大多使用相同的 gems 和相同的 CSS。
所有应用程序将驻留在同一台服务器上,并且可以共享一个数据库。有两个开发人员在开发这些应用程序,但一次只开发一个应用程序(即没有超过 1 人的团队)。
似乎有三种方法来构建它(不走将公共数据访问公开为服务的路线):
一个大型应用程序,具有命名空间(通过模块和路由)模型、控制器和视图。单个 git 仓库。
用于门户的单个轻量级主轨道应用程序,包含共享模型、视图、控制器。每个业务应用程序都被实现为一个可挂载的 Rails 引擎。主应用程序和每个引擎的 git 存储库。
具有共享模型、视图、控制器的单个完整引擎。门户和每个业务应用程序的 Rails 应用程序,它们都引用了完整的引擎。该引擎可能包含我猜想的所有模型,例如共享的 Java DAO 库。完整引擎和每个应用程序的 git 存储库。
类似 Java 的方法是 3,这似乎是最合理的方法。从我读过的内容来看,2 当然是可能的,即使引擎旨在用于增强主应用程序的常见功能(例如Devise)。我之前看到过 1 个被实现,但门户 + 多个 Web 应用程序架构没有 2 个或 3 个。将我们现有的应用程序转换为引擎是痛苦的,但也是可能的。
拥有一个大型应用程序和一个服务器有一定的便利性:例如,简化了部署。但这确实意味着这些应用程序不在它们自己的存储库中,对代码的任何更改都需要重新部署整个代码库。这似乎适用于将较小的应用程序组合成一个大型应用程序,但我怀疑它是否可以扩展到更大的商业应用程序,即使它们共享很多模型。
除了文章Migrating from a single Rails app to a suite of Rails engine和Rails Engine Patterns之外,似乎几乎没有这方面的信息。希望有经验的 Rails 开发人员/架构师提供一些指导。