1

背景:我们有应用程序 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。

4

3 回答 3

1

设计正是这样做的。您最好检查一下它的架构并将该架构应用于您自己的案例。

您将拥有多个独立的 Rails 应用程序。共享代码将是一个单独的项目,可能作为 gem 分发,或者至少是一个单独的 Git 存储库。共享代码将包括许多控制器操作和许多视图模板,这些模板具有合理的默认值,并且在某些应用程序中将被覆盖,而在其他应用程序中则不会。

应用程序 A 的所有自定义代码都将属于一个专门用于包含应用程序 A 的自定义代码的项目。它将是它自己的功能齐全的 Rails 应用程序,并且将严重依赖于共享代码提供的大多数合理默认值共享代码项目。

于 2010-12-28T21:53:51.733 回答
0

我之前用过主题支持插件,根据请求uri动态设置主题:

http://mattmccray.com/svn/rails/plugins/theme_support

它可能需要一些工作来支持 Rails 2.3。

更新:看起来有重写:https ://github.com/dasil003/rails-multisite

于 2010-12-28T20:58:00.563 回答
0

听起来您想让“基础”应用程序成为插件并在您的每个站点应用程序中使用它。您可以使用 svn-extern 之类的东西,以便在发生变化时自动更新。

于 2010-12-28T21:47:38.237 回答