背景:我们有应用程序 a、b,并计划在同一个应用程序中添加更多应用程序。这些应用程序非常相似,它们可以共享许多视图、资产和操作。目前 a,b 存在于单个 Rails 应用程序(2.3.10)中。c 将足够相似,它也可以在这个 rails 应用程序中。
问题:随着我们继续向这个应用程序添加更多应用程序,将会有太多的案例逻辑,该应用程序很快就会成为维护的噩梦。还会有潜在的命名空间问题。然而,这些应用程序在功能和布局上非常相似,将它们放在一个应用程序中也是有意义的,这样它就是一个需要维护的应用程序(因为大约 50% 的网站外观/功能将被共享)。
我们正在尝试做的是保持它尽可能干净,以便多个团队可以轻松地工作并且易于维护。
我们已经考虑过/正在尝试的一些事情:引擎。让每个应用程序成为引擎。这将使我们基于域的路由。它还允许我们为特定应用程序提取控制器、模型和视图。这个解决方案似乎并不理想,因为我们不会很快重用这些应用程序。并且在路由中明确说明主机似乎不正确。
皮肤/主题。应用程序之间的身份验证逻辑会有所不同。每个用户模型都会有所不同。所以这不仅仅是皮肤问题。
在 app/view 中为 sitea 视图添加文件夹 sitea,为 siteb 视图添加 siteb 等等。对控制器和模型执行相同的操作。这仍然很混乱,因为它没有遵循命名约定,所以它不能很好地与 rails 一起使用,并且使代码变得更加混乱。
制作另一个 Rails 应用程序。如果它们相同,我们只是不想在 2 个应用程序中维护相同的控制器或视图。
我们要做的是让应用程序智能地使用基于主机的控制器。因此,每个应用程序都会有一个会话控制器,也许还有一些用于共享逻辑的父会话控制器(现在不需要)。在每个会话控制器中,它处理该特定应用程序的身份验证。因此,如果域是 a.mysite.com,它将使用应用程序 a 的会话控制器并知道使用应用程序 a 的视图、模型、控制器。如果域是 b.mysite,它将使用 b 的会话控制器。并且将有一个用于 a 的用户模型和一个用于 b 的用户模型,这也将由域确定。
有没有人对这种情况有任何建议或经验?理想情况下,现在不能选择使用 rails 2.3.x 作为更新到 rails 3。