grails - 在应用程序启动期间对Grails合并的配置进行故障排除

标签 grails deployment groovy configuration diagnostics

假设我有一个名为myCoolApp的Grails应用程序。

此外,假设我在grails-app/conf/Config.groovygrails-app/conf/DataSource.groovy配置文件下的testproduction中定义了一些基本属性。
Config.groovy设置为与以下.groovy外部配置文件合并(如果在所有上都找到):

grails.config.locations = ["file:${userHome}/.grails/${appName}-config.groovy"]

最后,我还在本地* NIX用户路径下的外部测试服务器内部定义了这样的文件:
/home/appServerTestUser/.grails/myCoolApp-config.groovy

可悲的是,我发现由于某种原因,当Tomcat实例启动时,外部.groovy文件的属性没有被合并。
  • 我必须使Grails告诉我什么选项:“哦,是的,我在/home/appServerTestUser/.grails/myCoolApp-config.groovy上找到了您的外部配置文件”,这些是我合并到Config.groovy中的属性?

  • 谢谢!

    最佳答案

    在已部署的应用程序中,基于文件的路径没有多大意义。在您的开发机器上部署进行测试时,它可以工作,但在其他任何机器上可能会失败。即使使用正确的路径配置,它也可能会在本地失败,因为该进程将像以其他低特权用户身份运行。

    您可以使用绝对路径,例如/etc/myapp/path/to/file,但这倾向于将部署与文件系统结构耦合在一起,因此,如果您在Windows中进行开发并在Linux上进行部署,则使它们都正常工作将非常棘手。

    因此,部署Tomcat的最佳选择是使用classpath语法。您可以指定多个文件,它将加载所有找到的文件,因此我通常为本地开发人员提供一个条目,为已部署的应用程序提供一个条目:

    grails.config.locations = [
       "classpath:${appName}-config.groovy",
       "file:./${appName}-config.groovy"
    ]
    

    我删除.properties文件的条目是因为Groovy语法更加灵活,但是如果您愿意,可以使用它们。我还将dev文件保留在项目根目录中(并从源代码管理中排除)。

    因此,在部署时,请正确命名文件(不同的应用程序将具有不同的文件,因此不会发生冲突)并将它们放置在Tomcat的lib目录中。这在类路径中,因此classpath:条目将看到它。

    关于grails - 在应用程序启动期间对Grails合并的配置进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25433440/

    相关文章:

    performance - Grails 性能 : XML processing 4x slower in tomcat than run-app?

    javascript - 发送多个最终提交表单的 AJAX 请求会导致意外结果

    java - 将 Maven 项目从 Jenkins 部署到 JBoss AS 7.1.1 Final

    c# - 创建在线安装程序的标准方法是什么?

    postgresql - 将 Sequelize 连接到 Google Cloud SQL

    grails - 我是否需要在 grails 中显式刷新 GORM 保存调用?

    grails - Grails导出插件未下载

    Groovy 执行复杂的 shell 命令

    java - 压缩/缩小/优化 groovy-all、groovy 2.0.1 进行分发?

    xml - 在grails中修改groovy.util.slurpersupport.NodeChild