背景: 我们有app a,b,并计划在同一个应用程序中添加更多应用程序。应用程序足够相似,可以共享许多视图,资产和操作。目前a,b住在单轨应用程序(2.3.10)中。 c将足够相似,它也可以在这个rails应用程序中。
问题: 随着我们继续为这个应用程序添加更多应用程序,将会有太多的案例逻辑,该应用程序将很快成为维护的噩梦。还存在潜在的名称空间问题。但是,应用程序在功能和布局上非常相似,将它们保存在一个应用程序中也是有意义的,这样就可以维护一个应用程序(因为大约50%的站点外观/功能将被共享)。
我们要做的是尽可能保持干净,这样多个团队就可以轻松地进行工作并且易于维护。
我们已经考虑/正在尝试的一些事情: 引擎。让每个应用成为引擎。这将让我们基于域的路由。它还允许我们为特定应用程序提取控制器,模型和视图。此解决方案似乎并不理想,因为我们不会很快重复使用这些应用程序。并明确说明路线中的主机似乎不对。
剥皮/主题。应用程序之间的身份验证逻辑会有所不同。每个用户模型都不同。所以这不仅仅是剥皮问题。
在app / view中为sitea视图添加文件夹sitea,为siteb视图添加siteb等。对控制器和型号执行相同操作。这仍然非常混乱,因为它没有遵循命名约定,所以它不能很好地使用rails并使代码变得更加混乱。
制作另一个rails应用。我们只是不想在2个应用程序中维护相同的控制器或视图,如果它们相同的话。
我们想要做的是让应用程序智能地使用基于主机的控制器。因此,每个应用程序都会有一个会话控制器,也许还有一些用于共享逻辑的父会话控制器(现在不需要)。在每个会话控制器中,它处理该特定应用程序的身份验证。因此,如果域名是a.mysite.com,它将使用会话控制器用于应用程序a并知道使用应用程序的视图,模型,控制器。如果域是b.mysite,它将使用会话控制器b。并且将存在用于b的用户模型和用户模型,其也将由域确定。
有没有人对这种情况有任何建议或经验?理想情况下,使用rails 2.3.x作为更新到rails 3不是一个选项。
答案 0 :(得分:1)
Devise就是这样做的。您最好查看其架构并将该架构应用于您自己的案例。
您将拥有多个单独的Rails应用程序。共享代码将是一个单独的项目,可能作为gem或至少一个单独的Git存储库分发。共享代码将包含许多控制器操作和许多视图模板,这些模板是合理的默认值,并且将在某些应用程序中被覆盖,但在其他应用程序中不会被覆盖。
应用程序A的所有自定义代码都属于一个专门用于包含应用程序A的自定义代码的项目。它将是它自己的全功能Rails应用程序,并且将在很大程度上取决于由大多数提供的合理默认值。共享代码项目中的共享代码。
答案 1 :(得分:0)
之前我使用过主题支持插件,并根据请求uri动态设置主题:
http://mattmccray.com/svn/rails/plugins/theme_support
可能需要一些工作来支持Rails 2.3。
答案 2 :(得分:0)
听起来你想让'基础'应用成为一个插件并在你的每个网站应用中使用它。您可以使用类似svn-extern的东西,这样只要有变化,它就会自动更新。