Grails:两个站点,一个代码库

标签 grails

我有一个相当大的 Grails 应用程序,它有少量的 Controller 和 View ,以及大量的服务。

我现在需要构建同一站点的“重新设计”版本,该站点有自己的一组 View 和 Controller ( Controller 的工作方式有一些细微的差异),但服务组完全相同。一种选择是通过自定义 Grails 插件将所有服务移至某种公共(public)位置,但我想知道是否还有其他方法。

我想要做的是在 Controller 文件夹中放置两个包,com.company.sitea 和 com.company.siteb,并使用一个环境变量来有效地选择使用其中的一个。同样,两组不同的 View ,每组都基于此环境变量进行选择,但具有共享的标记库。

我找不到任何明显的东西可以做到这一点,是否有插件或标准方法可以做到这一点(或类似的东西)?我的想法是,我有一个代码库,我会构建一场 war ,但 war 将部署在两个不同的地方,每个地方都会为特殊的环境变量指定一个值。

最佳答案

我们已经成功地使用了一种模式,将第一个应用程序作为插件。它将作为第一个用例的应用程序运行,并作为第二个用例的插件包含在内。

如果您这样做(grails 应用程序同时是应用程序和插件),则必须在插件作为应用程序运行时将其排除在启动之外。否则,应用程序将自行启动两次:作为应用程序和作为插件。 “grails.plugin.excludes”配置设置(此处解释)可以防止这种情况发生。

我已在此 jira 问题中记录了此特殊用例: http://jira.grails.org/browse/GRAILS-6751 “除了将 Grails 应用程序用作应用程序之外,还允许将其用作 Grails 插件”

在许多情况下,这对我们来说是一个 killer 级功能。我们已经能够在其他用例中将应用程序作为插件重用,并将多个单独的应用程序合并为一个具有此功能的应用程序。当然,存在一些限制(例如名称冲突),但这对我们来说不是问题。

最常见的用例是重用完整的应用程序并覆盖另一个应用程序中的 View 。由于现有应用程序可以同时是应用程序和插件,因此无需将“公共(public)部分”提取到单独的插件中进行额外的工作。

要使现有的 Grails 应用程序成为插件,您只需将 MyAppNameGrailsPlugin.groovy 文件添加到根目录,并将此配置值添加到 grails-app/conf/Config.groovy 中: grails.plugin.excludes = ['myAppName'](应用程序名称以小写字母开头的驼峰式命名)

邮件列表讨论: http://grails.1312388.n4.nabble.com/Dynamic-applications-extending-an-existing-application-with-Grails-tp4634094p4634202.html

伯特的详细博客文章: http://burtbeckwith.com/blog/?p=1973

大卫·道森的演讲: http://skillsmatter.com/podcast/home/large-scale-grails-using-plugins-how-to-modularise-an-application/jd-8012

关于Grails:两个站点,一个代码库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281212/

相关文章:

grails - 文件路径在Grails中导致错误

grails - 启动Grails时出现错误

grails - 将grails 1.1.1升级到1.2.1

mysql - GORM 多对一映射表

tomcat 前面的 apache 和重定向无法正常工作

web-services - 使用Groovy从WSDL开始创建SOAP Web服务?

grails - 解压缩deploy war文件后,grains 3.0.3 with asset-pipeline-gradle:2.3.8无法正常工作

grails - ipRestrictions在Grails 3.3.10中不起作用?

hibernate - 为什么 Grails 在域对象保存时不通知我错误?

Grails 从 config.groovy 中访问当前环境