2011-03-16 18 views
10

grails.util.Environment,定義了許多預配置的環境如何在Grails中創建自定義環境?

  • 發展的
  • PRODUCTION
  • TEST
  • CUSTOM

當運行一個Grails命令,可使用被指定的使用環境-Denv標誌,例如grails run-app -Denv=test。您還可以指定一個代碼塊特定於使用閉包等有一定的環境:

environments { 
    production { 
     grails.serverURL = "http://www.changeme.com" 
    } 
    development { 
     grails.serverURL = "http://localhost:8080/${appName}" 
    } 
    test { 
     grails.serverURL = "http://localhost:8080/${appName}" 
    } 
} 

這些特定環境下的關閉可以Bootstrap.groovy使用,Config.groovy,是否有其他地方呢?

另外,是否可以定義我自己的環境,例如PRE_PRODUCTION,這樣它將與上面的關閉和-Denv標誌一起工作?

最後,環境可以與-Denv標誌一起使用嗎?

回答

15

可以BootStrap.groovy中和 Config.groovy中使用這些特定環境下的關閉,有沒有其他的地方呢?

我不這麼認爲......對於其他地方,你就需要使用Generic Per Environment Execution

Environment.executeForCurrentEnvironment { 
    production { 
     // do something in production 
    } 
    development { 
     // do something only in development 
    } 
    pre_production { 
     // do something for your custom environment 
    } 
} 

而且,有可能是我定義 我自己的環境,例如 PRE_PRODUCTION,這樣它會在上面關閉和-Denv 標誌處工作 ?

是啊,你應該能夠只是聲明-Dgrails.env=pre_production,包括BootStrap.groovy中或Config.groovy中(或如上所述的自定義grails.util.Environment塊)

編輯

由於pre_production塊您可以在Grails source for Environment中看到,這種自定義環境將枚舉到Environment.CUSTOM,然後在Environment.executeForCurrentEnvironment塊中,它將會check against CUSTOM, and the name of the custom environment

+0

謝謝,如果'PRE_PRODUCTION'會得到加到'grails.utils.Environment'枚舉任何想法?這似乎不太可能,因爲我不認爲常量可以在運行時添加到枚舉中。 –

+1

更新了我的答案以涵蓋此...不,它不會添加到Enum,您只需使用'String'將您的自定義環境的名稱標記爲'Environment.CUSTOM' –

+0

感謝您的更新。似乎沒有必要在任何地方配置定製環境列表,您可以繼續使用它們(如上所示)? –

4

如果您創建自定義環境,則可以在使用environments {}塊的任何位置使用該環境。例如,除了Bootstrap.groovyConfig.groovy之外,您還可以在DataSource.groovy中使用它,甚至可以在Searchable.groovy之類的其他配置文件中使用它。

而且,我相信

Environment.currentEnvironment.name會在你的情況下返回'pre_production'