2015-05-29 57 views
0

我正在使用Grails 2.4.2應用程序,並且相同的代碼庫用於各種客戶。每個客戶都可以獲得基於GSP的Web UI,並使用自己的圖標,文本字符串等進行自定義。我已確定使用Config.groovy中定義的Groovy變量在GSP頁面中完成了自定義設置。即像這樣:編譯的GSP頁面是否與上下文路徑綁定?

customerName = '' 
favicon = '' 

if (appName == 'foo') { 
    customerName = 'Foo' 
    favicon = "favicon_${appName}.ico" 
} 

這些變量然後從GSP頁面中引用。這工作正常。問題是應用程序需要爲每個客戶提供一個單獨的war文件。因此,CI服務器爲客戶A構建一場戰爭,然後運行grails clean,修改application.properties文件中的應用程序名稱等,爲客戶B構建戰爭等。每個戰爭文件構建需要大約4.5米,乘以10個客戶建立。所以我認爲更好的方法是構建war文件一次,然後讓CI服務器將其複製N次,並在每個war文件中修改application.properties文件,其中包含客戶名稱,servlet上下文路徑等。有人向我指出,GSP頁面在war文件構建期間被編譯,並且它們以上下文路徑作爲類名稱的一部分。這對我來說似乎有點奇怪。即假設我有Customer「Foo」,並且我決定構建一個名爲foo.war的war文件,該文件將部署在servlet上下文路徑/ foo中。在編譯結果的頁面「bar.gsp」將是這樣的:

WEB-INF/classes/gsp_foo_bar.class 
WEB-INF/classes/gsp_foo_bar_gsp_html.data 
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data 

我正在爲一個客戶的已編譯war文件,更改應用程序名稱和上下文,和重新部署它作爲試驗顧客B.它工作正常,並且我看到顧客B的圖標等等。因此,我想問題的總結歸結爲零件是否將頁面連接到上下文路徑/ foo,或者它是簡單的化妝品?我當然不希望在運行時懶惰編譯或重新編譯的性能受到影響。而且由於這種情況下GSP頁面的內容基本上是靜態的,並且不會改變,所以它似乎不必與上下文或應用程序名稱綁定。有沒有人知道它是否只是一個命名的東西,或者如果我更改應用程序名稱/上下文時不會重新編譯戰爭而遇到問題?也許有更好的方法來完成我想要的東西?謝謝。

+0

您GSPS的內部類的名字只是一個方式給它們命名。你真正的問題是什麼?您可以在同一臺服務器上使用不同的上下文路徑名稱部署相同的war,而不會有任何問題。你有沒有嘗試過? – albertovilches

+0

謝謝albertovilches。是的,我已經嘗試過,但不確定它是否存在缺點,比如應用程序無法使用編譯頁面或類似的東西。很高興聽到情況並非如此。 – user2337270

回答

0

如何使用外部配置並在佈局/模板中動態設置圖標?

Grails external configuration file

+0

我不確定我明白你的意思。 favicon通過GSP頁面中的變量來引用,就像現在一樣。我想也許我沒有明確地提出我的問題。問題是我需要爲每個客戶提供一份戰爭檔案,並且我想避免爲每個客戶重建它。但是,在編譯的GSP的類名中顯示上下文路徑使我認爲它與上下文路徑有某種聯繫。 – user2337270

+0

我的想法是有一個外部配置,並將所有這些客戶特定信息存儲在那裏。然後,您將使用自己的配置運行這些應用程序。至於上下文,大多數Web容器允許您定義應用程序的上下文路徑 - 請參閱http://stackoverflow.com/questions/2593472/define-servlet-context-in-war-file – defectus

+0

這幾乎是我的'在做。是的,各種客戶部署都有其獨特的上下文路徑。我想我應該改寫這個問題。這不是我想知道的配置,這就是爲什麼上下文路徑成爲編譯的GSP頁面類的一部分,以及編譯之後它是否實際上與上下文路徑相關聯的原因。即如果我決定在創建war文件後更改上下文路徑,是否會導致GSP出現問題?我試圖避免爲每個客戶重新創建war文件(包括編譯所有Groovy代碼和GSP頁面)。 – user2337270