簡體   English   中英

Grails:兩個站點,一個代碼庫

[英]Grails: Two Sites, One Codebase

我有一個相當大的Grails應用程序,其中包含少量的控制器和視圖,以及大量的服務。

現在,我需要為同一站點構建一個“重新設置皮膚”的版本,該站點具有自己的一組視圖和控制器(在控制器的工作方式上有一些細微的差別),但服務集卻完全相同。 一種選擇是通過自定義Grails插件將所有服務移至某種常見的位置,但是我想知道是否還有另一種方法。

我想做的是在controllers文件夾中有兩個包com.company.sitea和com.company.siteb,並帶有一個環境變量,該變量有效地選擇使用其中一個。 同樣,有兩組不同的視圖,每個視圖都是基於此環境變量選擇的,但是具有共享的taglib。

我找不到執行此操作的任何明顯操作,是否有插件或執行此操作的標准方法(或類似方法)? 這個想法是,我只有一個代碼庫,我會建立一個戰爭,但是戰爭將部署在兩個不同的地方,每個戰爭都將為一個特殊的環境變量指定一個值。

我們已經成功地使用了一種模式,在該模式中,第一個應用程序成為了插件。 它將作為第一個用例的應用程序運行,並作為第二個用例的插件包含在內。

如果執行此操作(grails應用程序同時是應用程序和插件),則必須在將其作為應用程序運行時將其排除在啟動之外。 否則,應用程序將自行啟動兩次:作為應用程序和插件。 “ grails.plugin.excludes”配置設置(在此處說明)可以防止這種情況的發生。

我已經在這個jira問題中記錄了這個特殊的用例: http : //jira.grails.org/browse/GRAILS-6751 “除了將Grails應用程序用作應用程序之外,還允許將Grails應用程序用作Grails插件”

在許多情況下,這已成為我們的殺手feature。 我們已經能夠在其他用例中重用應用程序作為插件,並通過此功能將多個單獨的應用程序組合為一個。 當然,有一些限制(例如名稱沖突),但這對我們來說不是問題。

最常見的用例是重用整個應用程序,然后在另一個應用程序中覆蓋視圖。 由於現有應用程序可以同時是一個應用程序和一個插件,因此將“通用部分”提取到一個單獨的插件中無需進行額外的工作。

要使現有的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

Burt的詳細博客文章: http : //burtbeckwith.com/blog/?p=1973

大衛·道森(David Dawson)的演講: http : //skillsmatter.com/podcast/home/large-scale-grails-using-plugins-how-to-modularise-an-application/jd-8012

一個重要因素是這兩個版本是否應在相同數據上運行? 因此它們將是同一數據庫上的不同前端? 還是它們將完全獨立,例如按客戶部署?

如果是第一個,我將采用網絡服務方式,因此一個應用程序將包含業務邏輯,並且控制器將作為網絡服務工作,而其他應用程序將具有不同的控制器,與第一個應用程序“對話”

您還可以將所有內容組合到一個項目(兩個版本)中,並通過apache卸載來限制對來自不同域的不同控制器的訪問

如果是后者,我還將嘗試將公共部分提取到插件中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM