【问题标题】:How to create a custom environment in Grails?如何在 Grails 中创建自定义环境?
【发布时间】:2011-03-16 10:06:50
【问题描述】:

grails.util.Environment,定义了一些预配置的环境

  • 发展
  • 生产
  • 测试
  • 自定义

运行 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.groovyConfig.groovy,还有其他地方吗?

另外,我是否可以定义自己的环境,例如PRE_PRODUCTION,这样它就可以与上面的闭包和-Denv 标志一起使用?

最后,CUSTOM 环境可以与-Denv 标志一起使用吗?

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    这些特定于环境的闭包 可用于 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 中包含 pre_production 块(或上面的自定义 grails.util.Environment 块)

    编辑

    正如您在 Grails source for Environment 中看到的,这种自定义环境将枚举到 Environment.CUSTOM,然后在 Environment.executeForCurrentEnvironment 块中,它将 check against CUSTOM, and the name of the custom environment

    【讨论】:

    • 谢谢,知道PRE_PRODUCTION 是否会被添加到grails.utils.Environment 枚举中吗?这似乎不太可能,因为我认为常量不能在运行时添加到枚举中。
    • 更新了我的答案以涵盖这个......不,它不会添加到枚举中,您只会被标记为 Environment.CUSTOM 并带有 String 的自定义环境名称跨度>
    • 感谢您的更新。好像不需要在任何地方配置自定义环境列表,直接使用就行了(如上图)?
    • 是的...显然,在指定-Denv 参数时,命令行上的拼写错误会困扰您;-)
    【解决方案2】:

    如果您创建自定义环境,则可以在使用 environments {} 块的任何地方使用它。比如除了Bootstrap.groovyConfig.groovy,你还可以在DataSource.groovy甚至Searchable.groovy等其他Config文件中使用。

    我也相信

    Environment.currentEnvironment.name 将在您的情况下返回 'pre_production'

    【讨论】:

      【解决方案3】:

      -Dgrails.env=pre_production

      更多信息请参见Grails documentation for configuration environments

      【讨论】:

      • 这是唯一一个具有正确命令行选项来选择环境的答案。
      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      相关资源
      最近更新 更多